当前位置: 技术问答>linux和unix
这个函数实现的是什么功能?
来源: 互联网 发布时间:2016-02-13
本文导语: char *constmap(cm,s,len) struct constmap *cm; char *s; int len; { constmap_hash h; int pos; h = hash(s,len); pos = cm->first[h & cm->mask]; while (pos != -1) { if (h == cm->hash[pos]) if (len == cm->inputlen[pos]) ...
char *constmap(cm,s,len)
struct constmap *cm;
char *s;
int len;
{
constmap_hash h;
int pos;
h = hash(s,len);
pos = cm->first[h & cm->mask];
while (pos != -1) {
if (h == cm->hash[pos])
if (len == cm->inputlen[pos])
if (!case_diffb(cm->input[pos],len,s))
return cm->input[pos] + cm->inputlen[pos] + 1;
pos = cm->next[pos];
}
return 0;
}
其实不能理解的原因是不明白constmap这个结构体成员的主要作用
struct constmap *cm;
char *s;
int len;
{
constmap_hash h;
int pos;
h = hash(s,len);
pos = cm->first[h & cm->mask];
while (pos != -1) {
if (h == cm->hash[pos])
if (len == cm->inputlen[pos])
if (!case_diffb(cm->input[pos],len,s))
return cm->input[pos] + cm->inputlen[pos] + 1;
pos = cm->next[pos];
}
return 0;
}
其实不能理解的原因是不明白constmap这个结构体成员的主要作用
|
struct constmap结果应该是全局的什么总统描叙..可以贴贴结构源码大家可以分析下
函数大概意思
首先根据字符串s及其长度,通过hash函数返回混码的结果赋值给混码类型的变量h,混码类型(constmap_hash估计是个无符号整形之类的);
再通过混码h与结构cm的对象掩码mask位与得到的其对象first数字的下表,并去数组值给pos,
循环的意思是如果h与结构cm的对象hash[pos](注:混码数表)相等且len也与cm的对象inputlen[pos],(注:输入长度)那么再通过case_diffb函数比较查到的结构cm输入input表的位置与函数参数s和len,进行比较,如果相同返回再cm结构里查到pos的位置的input值加上inputlen其位置的值再加1,否则继续下查直到pos返回为-1退出,返回0
函数大概意思
首先根据字符串s及其长度,通过hash函数返回混码的结果赋值给混码类型的变量h,混码类型(constmap_hash估计是个无符号整形之类的);
再通过混码h与结构cm的对象掩码mask位与得到的其对象first数字的下表,并去数组值给pos,
循环的意思是如果h与结构cm的对象hash[pos](注:混码数表)相等且len也与cm的对象inputlen[pos],(注:输入长度)那么再通过case_diffb函数比较查到的结构cm输入input表的位置与函数参数s和len,进行比较,如果相同返回再cm结构里查到pos的位置的input值加上inputlen其位置的值再加1,否则继续下查直到pos返回为-1退出,返回0