⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ccache.h

📁 一种用于编译时头文件的缓存处理缓存源代码,使用起来就像C/C++编译器的缓存预处理器,简化该功能相应的环境改变时对内核的影响。
💻 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 + -