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

Judy Array API介绍的更多相关文章

  1. Commons-lang API介绍

    4.1 Commons-lang API介绍 4.1.1 StringUtils 4.1.2 StringEscapeUtils 4.1.3 ArrayUtils 4.1.4 DateUtils 4. ...

  2. 常用ArcGIS for Silverlight 开发API介绍

    1.API介绍 2.Map对象  3.Layer对象 4.Symbol对象 5.Task对象

  3. Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解

    Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...

  4. python学习笔记(win32print API介绍)

    最近博主在研究用python控制打印机 这里整理下win32print的API介绍,官网地址http://timgolden.me.uk/pywin32-docs/win32print.html Op ...

  5. 使用html5中video自定义播放器必备知识点总结以及JS全屏API介绍

    一.video的js知识点: controls(控制器).autoplay(自动播放).loop(循环)==video默认的: 自定义播放器中一些JS中提供的方法和属性的记录: 1.play()控制视 ...

  6. APP自动化框架LazyAndroid使用手册(3)--核心API介绍

    作者:黄书力 概述 在前一篇博文中,简要介绍了一款安卓UI自动化测试框架LazyAndroid (http://blog.csdn.net/kaka1121/article/details/53204 ...

  7. Spring Boot 2.x 编写 RESTful API (一) RESTful API 介绍 & RestController

    用Spring Boot编写RESTful API 学习笔记 RESTful API 介绍 REST 是 Representational State Transfer 的缩写 所有的东西都是资源,所 ...

  8. FastDFS api介绍

    1. 命令行api介绍 FastDFS提供了可用于运维测试的命令行api,下面进行介绍: 1.1 fastdfs服务管理 tracker进程服务管理脚本 /etc/init.d/fdfs_tracke ...

  9. ElasticSearch的API介绍

    ElasticSearch的API介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ES是基于Restful风格 1>ES是基于Restful风格 Elasticsea ...

随机推荐

  1. sql server查看表占用索引空间(小技巧)

    选择表右键—属性—存储—索引空间

  2. (4/24) webpack3.x快速搭建本地服务和实现热更新

    写在前面: (1)为了防止版本兼容问题,此处的webpack版本与之前的一致为:webpack@3.6.0.同时这里我们安装的webpack-dev-server版本是2.9.7版本. (2)之前已经 ...

  3. Excel函数使用

    Excel函数使用: count&countif today&now count count() 仅可以统计数字类型的单元格个数 countif 根据条件来选择统计 countif(D ...

  4. Java中3种代理总结(示例代码见之前文章)

    1.JDK静态代理 业务接口 接口的实现类 代理类,实现接口,并扩展实现类的功能 ### 2.JDK动态代理 业务接口 实现了业务接口的业务类 实现了InvocationHandler接口的handl ...

  5. 7 python 类的组合

    1.组合与重用性 软件重用的重要方式除了继承之外还有另外一种方式,即:组合 组合指的是,在一个类中以另外一个类的对象作为 1.一个类的属性可以是一个类对象,通常情况下在一个类里面很少定义一个对象就是它 ...

  6. 从底层谈WebGIS 原理设计与实现(五):WebGIS中通过行列号来换算出多种瓦片的URL 之在线地图

    从底层谈WebGIS 原理设计与实现(五):WebGIS中通过行列号来换算出多种瓦片的URL 之在线地图 作者:naaoveGI…    文章来源:naaoveGIS    点击数:2063    更 ...

  7. python HttpServer共享文件

    在目录下运行 python -m SimpleHTTPServer python -m http.server 启动服务器.

  8. scala -- 层级

    层级 层级的顶端是Any 类,定义了如下方法 final def ==(that:Any):Boolean final def !=(that:Any):Boolean def equals(that ...

  9. 简单AOP

    代码如下 //使用说明 //1,新加接口与类 //2,新加类并实现ICallHandler类: ExecuteHandler //3,新建特性并实现HandlerAttribute和重写其中的Crea ...

  10. tensor flow 的两种padding方式

    https://segmentfault.com/a/1190000007846181