日期:2014-05-16  浏览次数:20729 次

这个函数实现的是什么功能?
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结果应该是全局的什么总统描叙..可以贴贴结构源码大家可以分析下

函数大概意思
首先根据字符串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