美文网首页
使用C语言实现泛型

使用C语言实现泛型

作者: jiangling500 | 来源:发表于2019-05-07 23:05 被阅读0次

    Redis中的泛型链表

    typedef struct listNode
    {
      struct listNode *prev;
      struct listNode *next;
      void *value;
    } listNode;
    
    typedef struct list
    {
      listNode *head;
      listNode *tail;
      void *(*dup)(void *ptr);
      void (*free)(void *ptr);
      int (*match)(void *ptr, void *key);
      unsigned int len;
    } list;
    

    其中:

    • 链表结点使用void*指针来保存节点值。
    • dupfreematch成员是用于实现多态链表所需的类型特定函数。
      所以链表可以用于保存各种不同类型的值。

    使用Redis中的泛型链表

    TODO

    Redis中的多态字典

    typedef struct dictEntry {
        void *key;
        void *val;
        struct dictEntry *next;
    } dictEntry;
    
    typedef struct dictType
    {
        unsigned int (*hashFunction)(const void *key);
        void *(*keyDup)(void *privdata, const void *key);
        void *(*valDup)(void *privdata, const void *obj);
        int (*keyCompare)(void *privdata, const void *key1, const void *key2);
        void (*keyDestructor)(void *privdata, void *key);
        void (*valDestructor)(void *privdata, void *obj);
    } dictType;
    
    typedef struct dictht {
        dictEntry **table;
        unsigned long size;
        unsigned long sizemask;
        unsigned long used;
    } dictht;
    
    typedef struct dict
    {
      dictType *type;
      void *privdata;
      dictht ht[2];
      int rehashidx;
      int iterators;
    };
    

    type属性和privdata属性是针对不同类型的键值对,为创建多态字典而设置的。

    参考

    相关文章

      网友评论

          本文标题:使用C语言实现泛型

          本文链接:https://www.haomeiwen.com/subject/xcvuoqtx.html