/ entropy-gathering / items-dict.c
items-dict.c
 1  #include <stdlib.h>
 2  #include "items-dict.h"
 3  
 4  static int sorted = 0;
 5  int comp(const void *a, const void *b)
 6  {
 7    return ((DESC *)a)->code - ((DESC *)b)->code;
 8  }
 9  
10  const DESC *dict_desc(int dictnum, uint16_t code)
11  {
12    int i, bot, top;
13  
14    if (!sorted) {
15      for (i = 0; i < sizeof(dicts) / sizeof(dicts[0]); i++)
16        qsort(dicts[i].dict, dicts[i].dict_sz / dicts[i].dict_membsz,
17  	    dicts[i].dict_membsz, comp);
18    }
19  
20    bot = 0;
21    top = dicts[dictnum].dict_sz / dicts[dictnum].dict_membsz;
22    while (top > bot) {
23      i = (bot + top) / 2;
24      if (code == dicts[dictnum].dict[i].code)
25        break;
26      if (code > dicts[dictnum].dict[i].code)
27        bot = i;
28      else
29        top = i;
30    }
31    return &dicts[dictnum].dict[i];
32  }