📄 ccache.h
字号:
/********************************************************************
created: 2008/01/23
filename: ccache.h
author: Lichuang
purpose:
*********************************************************************/
#ifndef __CCACHE_H__
#define __CCACHE_H__
#include <pthread.h>
#define USE_LIST
typedef struct cache_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表所在 */
}cache_t;
/**
* @brief 用于比较两个数据的函数指针类型
* @param
* @return > 0 data1 > data2, = 0 data1 = data2, < 0 data1 < data2
*/
typedef int (*comfun)(const void* data1, const void* data2, int size);
/**
* @brief 用于在淘汰节点时对节点数据进行处理的函数指针类型
* @param
* @return
*/
typedef void (*delfun)(const void* key, const void* data);
/**
* @brief 创建一个cache_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
*/
cache_t* create_cache(int nodenum, int datasize, int hashitemnum, int keysize, const char* mapfilename, int init);
/**
* @brief 创建一个cache_t对象指针
* @param cache 需要销毁的cache
* @return 0表示成功, 否则失败
*/
int destroy_cache(cache_t* cache);
/**
* @brief 向cache中插入一个数据
* @param key 数据的key
* @param data 数据
* @param cache 操作共享内存的数据结构
* @param cmp 用于比较key的函数指针
* @param fun 用于在淘汰节点时对节点数据进行处理的函数指针, 为NULL时则不进行处理直接淘汰
* @return 插入之后的index, 小于0表示出错
*/
int insert_data(const void* key, const void* data, cache_t* cache, comfun cmp, delfun fun);
/**
* @brief 在cache中查找一个数据
* @param key 数据的key
* @param data 如果查找成功, 数据的value将存放在这里
* @param cache 操作共享内存的数据结构
* @param cmp 用于比较key的函数指针
* @return 数据的index, 小于0表示出错
*/
int find_data(const void* key, void* data, cache_t* cache, comfun 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, cache_t* cache, comfun cmp);
/**
* @brief 向cache中删除一个数据
* @param key 数据的key
* @param data 如果删除成功, 这里存放删除的数据
* @param cache 操作共享内存的数据结构
* @param cmp 用于比较key的函数指针
* @return 已经被删除数据的index, 小于0表示出错
*/
int delete_data(const void* key, void* data, cache_t* cache, comfun cmp);
#endif /* __CCACHE_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -