enum {
kHashBits = 8,
kHashCount = 1 << kHashBits, //Hash表大小(1<<8=256),值越大缓存检索越快
};
struct data_t{
unsigned int id; //必须是唯一值,ID不能为0
char * data_ptr;
};
static data_t * hash_cache[kHashCount]={0};
//Hash值生成函数
unsigned int hash_fun(unsigned int id)
{
id ^= id >> 16;
id ^= id >> 8;
return id%kHashCount;
}
data_t * find_by_hash_cache(unsigned int id)
{
unsigned int hid=hash_fun(id);
data_t *p=hash_cache[hid]; //从Hash表缓冲查找
if (p->id==id)
{
return p;
}
p=find_by_list(id); //从链表或者其他数据结构查找
if (p)
{
hash_cache[hid]=p; //存入Hash表
return p;
}
return NULL;
}