📄 ccache.h
字号:
/********************************************************************
created: 2008/01/23
filename: ccache.h
author: Lichuang
purpose:
*********************************************************************/
#ifndef __CCACHE_H__
#define __CCACHE_H__
#include <pthread.h>
#define USE_LIST
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
typedef struct ccache_t
{
int hashitemnum; /* hash表的数量 */
int nodenum; /* cache中存放的节点的总数量 */
int usednodenum; /* cache中已经存放的节点的数量 */
int nodesize; /* 一个节点的总大小 = 数据大小 + key大小 */
int datasize; /* 数据大小 */
int keysize; /* key大小 */
int hashitemtolsize; /* 所有hash表的总大小 */
int mapfilesize; /* 共享内存map文件的大小 */
int firstfreenode; /* 空闲节点链表的头节点, 小于0时表示不存在空闲节点了 */
int lrufirst, lrulast; /* lru链表的头,尾节点 */
pthread_mutex_t mutex; /* 线程锁对象 */
char data[0]; /* 数据区, 以下就是cache存放的数据和hash表所在 */
}ccache_t;
/**
* @brief 用于比较两个数据的函数指针类型
* @param
* @return > 0 data1 > data2, = 0 data1 = data2, < 0 data1 < data2
*/
typedef int (*cmpfun)(const void* data1, const void* data2);
/**
* @brief 用于在淘汰节点时对节点数据进行处理的函数指针类型
* @param
* @return
*/
typedef void (*delfun)(const void* key, const void* data);
/**
* @brief 用于在更新节点数据的函数指针类型, 该函数将对org和updatedata进行操作,结果存放在updatedata中
* @param org 原有的数据
* @param updatedata 更新的数据
* @return
*/
typedef void (*updatefun)(const void* org, void* updatedata);
/**
* @brief 用于访问cache所有节点的函数
* @param key 节点的key
* @param data 节点的data
* @return
*/
typedef void (*visitfun)(const void* key, void* data);
/**
* @brief 创建一个ccache_t对象指针
* @param nodenum cache中保存的数据数量
* @param datasize cache中保存的数据大小
* @param hashitemnum cache中保存的hash表数量
* @param key cache中保存的key大小
* @param mapfilename 共享文件名
* @param init 是否对共享内存文件进行初始化, 如果文件不存在或者大小与实际要求大小不一致, 那么忽略init参数都会对文件进行初始化
* @return > 0 data1 > data2, = 0 data1 = data2, < 0 data1 < data2
*/
ccache_t* create_cache(int nodenum, int datasize, int hashitemnum, int keysize, const char* mapfilename, int init);
/**
* @brief 创建一个ccache_t对象指针
* @param cache 需要销毁的cache
* @return 0表示成功, 否则失败
*/
int destroy_cache(ccache_t* cache);
/**
* @brief 向cache中插入一个数据
* @param key 数据的key
* @param data 数据
* @param cache 操作共享内存的数据结构
* @param cmp 用于比较key的函数指针
* @param del 用于在淘汰节点时对节点数据进行处理的函数指针, 为NULL时则不进行处理直接淘汰
* @return 插入之后的index, 小于0表示出错
*/
int insert_data(const void* key, const void* data, ccache_t* cache, cmpfun cmp, delfun del);
/**
* @brief 在cache中查找一个数据
* @param key 数据的key
* @param data 如果查找成功, 数据的value将存放在这里
* @param cache 操作共享内存的数据结构
* @param cmp 用于比较key的函数指针
* @return 数据的index, 小于0表示出错
*/
int find_data(const void* key, void* data, ccache_t* cache, cmpfun cmp);
/**
* @brief 向cache中更新一个数据
* @param key 数据的key
* @param data 新的数据
* @param cache 操作共享内存的数据结构
* @param cmp 用于比较key的函数指针
* @return 数据的index, 小于0表示出错
*/
int update_data(const void* key, const void* data, ccache_t* cache, cmpfun cmp);
/**
* @brief 向cache中删除一个数据
* @param key 数据的key
* @param data 如果删除成功, 这里存放删除的数据
* @param cache 操作共享内存的数据结构
* @param cmp 用于比较key的函数指针
* @return 已经被删除数据的index, 小于0表示出错
*/
int delete_data(const void* key, void* data, ccache_t* cache, cmpfun cmp);
/**
* @brief 向cache中更新一个数据, 如果cache中没有,就用更新的数据插入进去, 否则调用updatefun进行更新
* @param key 数据的key
* @param data 更新的数据, 更新之后的结果保存在该数据中
* @param cache 操作共享内存的数据结构
* @param cmp 用于比较key的函数指针
* @param del 用于在淘汰节点时对节点数据进行处理的函数指针, 为NULL时则不进行处理直接淘汰
* @param update 用于操作原有数据和更新数据生成新的数据的函数指针
* @return 数据的index, 小于0表示出错
*/
int update_or_insert_data(const void* key, void* data, ccache_t* cache, cmpfun cmp, delfun del, updatefun update);
/**
* @brief 使用visit函数指针访问cache中的所有节点
* @param cache 操作共享内存的数据结构
* @param visit 用于访问节点数据的函数指针
* @return 成功返回0, 失败返回-1
*/
int visit_cache(ccache_t* cache, visitfun visit);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __CCACHE_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -