redis list结构体中支持多种数据格式的实现
来源:互联网 发布:威风堂堂动作数据下载 编辑:程序博客网 时间:2024/06/09 19:50
redis在adlist.h中定义了双向链表的数据结构
typedef struct listNode { struct listNode *prev; struct listNode *next; void *value;} listNode;typedef struct listIter { listNode *next; int direction;} listIter;typedef struct list { listNode *head; listNode *tail; void *(*dup)(void *ptr); void (*free)(void *ptr); int (*match)(void *ptr, void *key); unsigned long len;} list;第一个定义了每一个节点的数据类型,前向指针后项指针和一个value,这个value定义成了void *的类型,使这个双向链表的节点能够储存任意类型的数据,但是又涉及到一个问题,对不同类型进行相同的操作时(比如 复制,释放,比较等等)的方法一定是不同的,这就出现了麻烦。所以在定义链表的结构时,结构体里面除了必须的数据外,还有三个函数指针,真三个函数指针分别为复制,释放和匹配,dup返回一个void类型的指针,当需要用到这些操作时,直接利用对应的函数指针就可以完成。
#define listSetDupMethod(l,m) ((l)->dup = (m))#define listSetFreeMethod(l,m) ((l)->free = (m))#define listSetMatchMethod(l,m) ((l)->match = (m))#define listGetDupMethod(l) ((l)->dup)#define listGetFree(l) ((l)->free)#define listGetMatchMethod(l) ((l)->match)六个宏定义的方法,设置和获取当前链表使用的方法,真正的实现在函数m里面
0 0
- redis list结构体中支持多种数据格式的实现
- Qt中实现多种语言的支持
- GDAL支持的数据格式
- Redis 支持的5种数据结构
- Redis 中list的实现(地址传值)
- Winform开发框架中实现多种数据库类型切换以及分拆数据库的支持-伍华聪
- 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持
- C#中List保存的结构体
- ArcGIS 支持的数据格式列表
- Json,List,Map的数据格式
- 策略模式实现支持多种类数据库的DBHelp
- 支持多种类型的栈——C语言实现
- 同一个二维码支持多种支付的实现思路
- 用于多种结构体的函数对象
- android中支持多种文件类型的下载类
- ios开发中使用NSLocalizedString进行多种语言的支持
- python中对list去重的多种方法
- Redis数据格式
- jQuery之事件对象/大数据,云计算,分布式,负载均衡,集群,微服务详解
- C类型转换
- MySQL 基础
- Socket Demo
- 蓝桥杯java第八届第八题--包子凑数
- redis list结构体中支持多种数据格式的实现
- mac 安装MySQL-python
- Unity 场景存在多个烘焙光照效果
- Linux常用命令(30)之特殊权限管理ACL
- pc测试csdn博客1-20170414
- iOS 原生自带的离线语音识别---speech framework
- Mysql的基本语法了解
- EasyPusher EasyRTMP视频直播推送中对H264帧类型判断
- ABAP 选择屏幕下拉框-listbox