Mysql中的哈希

来源:互联网 发布:网络经纪人 编辑:程序博客网 时间:2024/05/06 10:23

函数:
static uint hash_mask(uint hashnr,uint buffmax,uint maxlength);
功能
用于查找hash中的索引
参数
uint hashnr,有哈希key算出的哈希值
uint buffmax,哈希表的总长度
uint maxlength,哈希表现有元素的个数
返回值:索引

函数:
static void movelink(HASH_LINK *array,uint pos,uint next_link,uint newlink);
功能:
从next开始,在array中寻找下一个为pos的节点,并用newlink替换pos
参数:
HASH_LINK *array:目标数组
uint pos:目标位置
uint next_link:起始位置
uint newlink:替换后的位置

函数:
static int hashcmp(HASH *hash,HASH_LINK *pos,const byte *key,uint length);
功能:
用pos的节点与key比较
参数:
HASH_LINK *pos:待比较的节点
const byte *key:待比较的key
uint length:长度


函数:
static uint calc_hash(HASH *hash,const byte *key,uint length);
功能:
计算哈希值
参数:
返回值:哈希值

函数:
my_bool
_hash_init(HASH *hash,CHARSET_INFO *charset,
    uint size,uint key_offset,uint key_length,
    hash_get_key get_key,
    void (*free_element)(void*),uint flags CALLER_INFO_PROTO);
功能:
初始化一个哈希表
参数:
CHARSET_INFO *charset:字符编码集
uint size  : 哈希表中元素个数
uint key_offset :如果get_key == NULL;那么可以将key存储在recoder中,此时通过record+hash->key_offset定位key值
uint key_length :键长度
hash_get_key get_key:获得key的函数
void (*free_element)(void*):释放哈希元素的函数
uint flags CALLER_INFO_PROTO:标志位
返回值:OK/NG

函数:
static inline void hash_free_elements(HASH *hash)
功能:
释放哈希元素
参数:
返回值

函数:
void hash_free(HASH *hash)
功能:
释放整个哈希表
参数:
返回值:

函数:
void my_hash_reset(HASH *hash)
功能
重置哈希表
参数:
返回值:

函数:
static inline char*
hash_key(HASH *hash,const byte *record,uint *length,my_bool first)
功能:
查找recoder的key值
参数:
byte *record:记录的内容
uint *length:key的长度
my_bool first:是否是first
返回值:key

函数:
static uint hash_rec_mask(HASH *hash,HASH_LINK *pos,uint buffmax,
     uint maxlength)
功能:通过一个哈希元素元素中的记录计算索引
参数
HASH_LINK *pos:哈希表中的一个记录
uint buffmax: 哈希表的长度
uint maxlength:哈希表中记录数
返回值:索引

函数:
unsigned int rec_hashnr(HASH *hash,const byte *record)
功能:
功过记录数据计算哈希值
参数:
const byte *record:记录数据
返回值:哈希值

函数:
gptr hash_search(HASH *hash,const byte *key,uint length)
功能:
通过key值寻找元素位置的记录数据
参数:
const byte *key:
uint length:
返回值:
OK:找到的位置的记录
NO:0

函数:
gptr hash_next(HASH *hash,const byte *key,uint length)
功能:
通过key寻找下一个哈希元素的记录数据
const byte *key:
uint length:
返回值:
OK:找到记录
NO:0

函数:
my_bool my_hash_insert(HASH *info,const byte *record)
功能:
将一个记录插入哈希表
参数:
const byte *record:
返回值:
TRUE/FALSE

函数:
my_bool hash_delete(HASH *hash,byte *record)
功能:
删除哈希记录
参数:
byte *record:
返回值:
TRUE/FALSE

函数:
my_bool hash_update(HASH *hash,byte *record,byte *old_key,uint old_key_length)
功能:
当一条记录变更时,更新key
参数:
byte *record:
byte *old_key
uint old_key_length
返回值:
TRUE/FALSE

函数:
byte *hash_element(HASH *hash,uint idx)
功能:
根据索引查记录
参数:
返回值:
记录

函数:
void hash_replace(HASH *hash, uint idx, byte *new_row)
功能:
用新纪录换旧记录
参数:
返回值:

函数:
my_bool hash_check(HASH *hash)
功能:
检查哈希表正确性,检查方式:
①索引大于总记录数目
②计算索引与实际不一致
③找到的记录数目与记录数目不一致
参数:
返回值:
error