zoukankan      html  css  js  c++  java
  • 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的内容。

  • 相关阅读:
    184. Department Highest Salary【leetcode】sql,join on
    181. Employees Earning More Than Their Managers【leetcode】,sql,inner join ,where
    178. Rank Scores【leetcode】,sql
    177. Nth Highest Salary【leetcode】,第n高数值,sql,limit,offset
    176. Second Highest Salary【取表中第二高的值】,sql,limit,offset
    118. Pascal's Triangle【LeetCode】,java,算法,杨辉三角
    204. Count Primes【leetcode】java,算法,质数
    202. Happy Number【leetcode】java,hashSet,算法
    41. First Missing Positive【leetcode】寻找第一个丢失的整数,java,算法
    删除
  • 原文地址:https://www.cnblogs.com/cobbliu/p/3401965.html
Copyright © 2011-2022 走看看