• Judy Array API介绍


    本文介绍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的内容。

  • 相关阅读:
    【UVa 1592】Database
    【UVa 400】Unix ls
    【UVa 136】Ugly Numbers
    【UVa 540】Team Queue
    【Uva 12096】The SetStack Computer
    【POJ 1050】To the Max
    【UVa 156】Ananagrams
    【UVa 10815】Andy's First Dictionary
    [HNOI/AHOI2018]转盘
    CF46F Hercule Poirot Problem
  • 原文地址:https://www.cnblogs.com/cobbliu/p/3401965.html
Copyright © 2020-2023  润新知