本文介绍https://code.google.com/p/judyarray/这个JudyArray实现的API。
judy_open:新建一个JudyArray,并返回指向这个JudyArray的指针。
judy_close:释放为JudyArray分配的存储空间。这个函数同时也会释放调用judy_data和judy_clone申请的空间。
judy_clone
judy_data:
void *judy_data (Judy *judy, uint amt)
从judy中分配大小为amt的存储空间,返回指向此空间的指针。这个函数通常用来为key对应的value分配私有空间。
jud_cell:
向已有的JudyArray中插入一个string类型的key,并返回指向该key对应的value的指针。
调用方法是:
uint *judy_cell (Judy *judy, uchar *buff, uint len)
不管这个Key在judy中是否存在,返回的指针的内容都是value的内容。
如果这个key在judy中存在,返回的指针的内容是value的内容。用户可以把这个内容转换为自己的指针类型,来访问value数据。
如果这个key在judy中不存在,返回的指针的内容是0,用户可以创建value数据,并把value数据的地址填到这个0的位置。
judy_cell典型的用法是:
JudySlot *slot; slot = judy_cell(judy, key1, strlen(key1)); if(*slot){ // already exist Value *v = (Value*)(*slot); //use v; } else { // do not exist Value *v = judy_data(judy, sizeof(Value)); //fill v *slot = (JudySlot)v; }
judy_slot:
从judy中取出key对应的value,返回值的内容实际上是value的地址地址。如果key不存在,则返回NULL。
uint *judy_slot (Judy *judy, uchar *buff, uint len)
judy_strt:
judy_prv:
judy_nxt:
judy_key:
这几个函数是获取judyarray的迭代器,并访问judyarray元素的。
uint *judy_strt (Judy *judy, uchar *buff, uint len) uint *judy_prv (Judy *judy) uint *judy_nxt (Judy *judy)
uint judy_key (Judy *judy, uchar *buff, uint max)
其中judy_key返回迭代器位置的key,key的值存储到buff中,max表示buff的大小,返回值是key的长度。
这几个函数的典型用法是:
char key[MAX_LEN]; cell = judy_strt(judy, NULL, 0); while(cell){ len = judy_key(judy, key, sizeof(key)); Value *v = (Value*)(*cell); //visit v
//judy_del(judy); cell = judy_nxt(judy); }
judy_del:删除一个key value
uint *judy_del (Judy *judy)
它可以用在两个地方,一是在迭代器中,如上面例子中的注释所示;还有是可以用在judy_cell函数调用后,这个时候judy中内置的栈顶元素指向当前访问的元素,也可以用judy_del删除该元素。它的返回值是该元素的上一个key-value的value的内容。