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的内容。
Judy Array API介绍的更多相关文章
- 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. ...
- 常用ArcGIS for Silverlight 开发API介绍
1.API介绍 2.Map对象 3.Layer对象 4.Symbol对象 5.Task对象
- Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解
Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...
- python学习笔记(win32print API介绍)
最近博主在研究用python控制打印机 这里整理下win32print的API介绍,官网地址http://timgolden.me.uk/pywin32-docs/win32print.html Op ...
- 使用html5中video自定义播放器必备知识点总结以及JS全屏API介绍
一.video的js知识点: controls(控制器).autoplay(自动播放).loop(循环)==video默认的: 自定义播放器中一些JS中提供的方法和属性的记录: 1.play()控制视 ...
- APP自动化框架LazyAndroid使用手册(3)--核心API介绍
作者:黄书力 概述 在前一篇博文中,简要介绍了一款安卓UI自动化测试框架LazyAndroid (http://blog.csdn.net/kaka1121/article/details/53204 ...
- Spring Boot 2.x 编写 RESTful API (一) RESTful API 介绍 & RestController
用Spring Boot编写RESTful API 学习笔记 RESTful API 介绍 REST 是 Representational State Transfer 的缩写 所有的东西都是资源,所 ...
- FastDFS api介绍
1. 命令行api介绍 FastDFS提供了可用于运维测试的命令行api,下面进行介绍: 1.1 fastdfs服务管理 tracker进程服务管理脚本 /etc/init.d/fdfs_tracke ...
- ElasticSearch的API介绍
ElasticSearch的API介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ES是基于Restful风格 1>ES是基于Restful风格 Elasticsea ...
随机推荐
- Python - Django - ORM 操作数据
查询数据(查询管理员): app01/models.py 中定义的类,也就是创建的表 from django.db import models # 类必须继承 models.Model class A ...
- FBV和CBV区别
FBV和CBV区别 def dispatch(self, request, *args, **kwargs): # 做分发的 if request.meth ...
- TCP keep-alive翻译
原文链接: http://www.freesoft.org/CIE/RFC/1122/114.htmhttp://www.freesoft.org/CIE/RFC/1122/index.htm 实现T ...
- 6、SpringMVC源码分析(1):分析DispatcherServlet.doDispatch方法,了解总体流程
所有的http请求都会交给DispatcherServlet类的doDispatch方法进行处理,将DispatcherServlet.doDispatch函数的javadoc复制到下面: /* * ...
- HtmlRowCreated关于e.Row.Cells[0]的获取和设置
获取采用: cmd2.Parameters.AddWithValue("@xh", e.GetValue("学号").ToString().Trim()); ...
- PHP依赖注入
对于依赖注入 我现在的理解是把一个方法当成一个变量放进另一个方法的形参里 <?php class Factory { public static function getDb(){ return ...
- java 项目中类找不到异常解决办法
最后点击Apply and Close就可以了
- WDA-FPM-4-用OVP做查询跳转到明细
转载:https://www.cnblogs.com/sapSB/p/10100697.html FPM四:用OVP做查询跳转到明细 前面做了查询的UIBB配置,在这边可以直接复用,查询的feed ...
- Win10 pip install gensim 报错处理
# 故障描述 shell > pip install gensim # 报错信息如下: Command "c:\users\op\appdata\local\programs\pyth ...
- mysql 内存占用过多的解决方法
以下是5.6默认的设置performance_schema_max_table_instances 12500table_definition_cache 1400table_open_cache 2 ...