acl  3.5.3.0
acl_mdb.h 文件参考
+ acl_mdb.h 的引用(Include)关系图:
+ 此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

宏定义

#define ACL_MDT_FLAG_NUL   (0)
 
#define ACL_MDT_FLAG_UNI   (1 << 0)
 
#define ACL_MDT_FLAG_KMR   (1 << 1)
 
#define ACL_MDT_FLAG_DMR   (1 << 2)
 
#define ACL_MDT_FLAG_SLICE1   (1 << 10)
 
#define ACL_MDT_FLAG_SLICE2   (1 << 11)
 
#define ACL_MDT_FLAG_SLICE3   (1 << 12)
 
#define ACL_MDT_FLAG_SLICE_RTGC_OFF   (1 << 13)
 

类型定义

typedef struct ACL_MDT_NOD ACL_MDT_NOD
 
typedef struct ACL_MDT_RES ACL_MDT_RES
 
typedef struct ACL_MDT_REC ACL_MDT_REC
 
typedef struct ACL_MDT_REF ACL_MDT_REF
 
typedef struct ACL_MDT_IDX ACL_MDT_IDX
 
typedef struct ACL_MDT ACL_MDT
 
typedef struct ACL_MDB ACL_MDB
 

函数

ACL_API ACL_MDBacl_mdb_create (const char *dbname, const char *dbtype)
 
ACL_API void acl_mdb_free (ACL_MDB *mdb)
 
ACL_API ACL_MDTacl_mdb_tbl_create (ACL_MDB *mdb, const char *tbl_name, unsigned int tbl_flag, size_t init_capacity, const char *key_labels[], unsigned int flags[])
 
ACL_API ACL_MDT_NODacl_mdb_add (ACL_MDB *mdb, const char *tbl_name, void *data, unsigned int dlen, const char *key_labels[], const char *keys[])
 
ACL_API int acl_mdb_probe (ACL_MDB *mdb, const char *tbl_name, const char *key_label, const char *key)
 
ACL_API ACL_MDT_RESacl_mdb_find (ACL_MDB *mdb, const char *tbl_name, const char *key_label, const char *key, int from, int limit)
 
ACL_API ACL_MDT_RESacl_mdb_list (ACL_MDB *mdb, const char *tbl_name, int from, int limit)
 
ACL_API int acl_mdb_del (ACL_MDB *mdb, const char *tbl_name, const char *key_label, const char *key, void(*onfree_fn)(void *, unsigned int))
 
ACL_API int acl_mdb_walk (ACL_MDB *mdb, const char *tbl_name, int(*walk_fn)(const void *, unsigned int), int from, int limit)
 
ACL_API int acl_mdb_cnt (ACL_MDB *mdb, const char *tbl_name)
 
ACL_API ACL_MDTacl_mdt_create (const char *dbtype, const char *tbl_name, unsigned int tbl_flag, size_t init_capacity, const char *key_labels[], unsigned int flags[])
 
ACL_API void acl_mdt_free (ACL_MDT *mdt)
 
ACL_API ACL_MDT_NODacl_mdt_add (ACL_MDT *mdt, void *data, unsigned int dlen, const char *key_labels[], const char *keys[])
 
ACL_API int acl_mdt_probe (ACL_MDT *mdt, const char *key_label, const char *key)
 
ACL_API ACL_MDT_RESacl_mdt_find (ACL_MDT *mdt, const char *key_label, const char *key, int from, int limit)
 
ACL_API ACL_MDT_RESacl_mdt_list (ACL_MDT *mdt, int from, int limit)
 
ACL_API int acl_mdt_delete (ACL_MDT *mdt, const char *key_label, const char *key, void(*onfree_fn)(void *, unsigned int))
 
ACL_API int acl_mdt_walk (ACL_MDT *mdt, int(*walk_fn)(const void *, unsigned int), int from, int len)
 
ACL_API const void * acl_mdt_fetch_row (ACL_MDT_RES *res)
 
ACL_API int acl_mdt_row_count (ACL_MDT_RES *res)
 
ACL_API void acl_mdt_res_free (ACL_MDT_RES *res)
 
ACL_API int acl_mdt_cnt (ACL_MDT *mdt)
 

宏定义说明

◆ ACL_MDT_FLAG_DMR

#define ACL_MDT_FLAG_DMR   (1 << 2)

表示重用值内存

在文件 acl_mdb.h22 行定义.

◆ ACL_MDT_FLAG_KMR

#define ACL_MDT_FLAG_KMR   (1 << 1)

表示重用键内存

在文件 acl_mdb.h21 行定义.

◆ ACL_MDT_FLAG_NUL

#define ACL_MDT_FLAG_NUL   (0)

在文件 acl_mdb.h19 行定义.

◆ ACL_MDT_FLAG_SLICE1

#define ACL_MDT_FLAG_SLICE1   (1 << 10)

启用 ACL_SLICE_FLAG_GC1

在文件 acl_mdb.h23 行定义.

◆ ACL_MDT_FLAG_SLICE2

#define ACL_MDT_FLAG_SLICE2   (1 << 11)

启用 ACL_SLICE_FLAG_GC2

在文件 acl_mdb.h24 行定义.

◆ ACL_MDT_FLAG_SLICE3

#define ACL_MDT_FLAG_SLICE3   (1 << 12)

启用 ACL_SLICE_FLAG_GC3

在文件 acl_mdb.h25 行定义.

◆ ACL_MDT_FLAG_SLICE_RTGC_OFF

#define ACL_MDT_FLAG_SLICE_RTGC_OFF   (1 << 13)

关闭内存切片的实时垃圾回收功能

在文件 acl_mdb.h26 行定义.

◆ ACL_MDT_FLAG_UNI

#define ACL_MDT_FLAG_UNI   (1 << 0)

表示唯一

在文件 acl_mdb.h20 行定义.

类型定义说明

◆ ACL_MDB

typedef struct ACL_MDB ACL_MDB

在文件 acl_mdb.h16 行定义.

◆ ACL_MDT

typedef struct ACL_MDT ACL_MDT

在文件 acl_mdb.h15 行定义.

◆ ACL_MDT_IDX

typedef struct ACL_MDT_IDX ACL_MDT_IDX

在文件 acl_mdb.h14 行定义.

◆ ACL_MDT_NOD

typedef struct ACL_MDT_NOD ACL_MDT_NOD

在文件 acl_mdb.h10 行定义.

◆ ACL_MDT_REC

typedef struct ACL_MDT_REC ACL_MDT_REC

在文件 acl_mdb.h12 行定义.

◆ ACL_MDT_REF

typedef struct ACL_MDT_REF ACL_MDT_REF

在文件 acl_mdb.h13 行定义.

◆ ACL_MDT_RES

typedef struct ACL_MDT_RES ACL_MDT_RES

在文件 acl_mdb.h11 行定义.

函数说明

◆ acl_mdb_add()

ACL_API ACL_MDT_NOD* acl_mdb_add ( ACL_MDB mdb,
const char *  tbl_name,
void *  data,
unsigned int  dlen,
const char *  key_labels[],
const char *  keys[] 
)

添加一条新的数据记录

参数
mdb{ACL_MDB*} 数据库句柄
tbl_name{const char*} 数据表名
data{void*} 应用数据项
dlen{unsigned int} data 的数据大小
key_labels{const char *[]} 数据表字段名数组
keys{const char *[]} 数据表字段名对应值数组
返回
{ACL_MDB_NOD*} 新添加的数据在数据表中存储的句柄

◆ acl_mdb_cnt()

ACL_API int acl_mdb_cnt ( ACL_MDB mdb,
const char *  tbl_name 
)

数据库中某个数据表中元素总个数

参数
mdb{ACL_MDB*} 数据库句柄
tbl_name{const char*} 数据表名
返回
{int} >=0

◆ acl_mdb_create()

ACL_API ACL_MDB* acl_mdb_create ( const char *  dbname,
const char *  dbtype 
)

创建一个数据库句柄

参数
dbname{const char*} 数据库名
dbtype{const char*} 数据库类型: hash/avl
返回
{ACL_MDB*} 数据库句柄

◆ acl_mdb_del()

ACL_API int acl_mdb_del ( ACL_MDB mdb,
const char *  tbl_name,
const char *  key_label,
const char *  key,
void(*)(void *, unsigned int)  onfree_fn 
)

从数据库中删除一条数据记录

参数
mdb{ACL_MDB*} 数据库句柄
tbl_name{const char*} 数据表名
key_label{const char*} 数据表字段名
key{const char*} 数据表字段值
onfree_fn{void (*)(void*, unsigned int)} 释放用户的对象时调用的释放回调函数
返回
{int} 删除的行数量

◆ acl_mdb_find()

ACL_API ACL_MDT_RES* acl_mdb_find ( ACL_MDB mdb,
const char *  tbl_name,
const char *  key_label,
const char *  key,
int  from,
int  limit 
)

从数据库中查询符合条件的结果集

参数
mdb{ACL_MDB*} 数据库句柄
tbl_name{const char*} 数据表名
key_label{const char*} 数据表中的字段名
key{const char*} 数据表中的字段值
from{int} 查询的结果希望是从该位置开始进行存储
limit{int} 查询的结果的最大希望个数
返回
{ACL_MDT_RES*} 查询结果集,如果为空则表明查询结果为空或出错

◆ acl_mdb_free()

ACL_API void acl_mdb_free ( ACL_MDB mdb)

关闭并释放一个内存数据库

参数
mdb{ACL_MDB*} 数据库句柄

◆ acl_mdb_list()

ACL_API ACL_MDT_RES* acl_mdb_list ( ACL_MDB mdb,
const char *  tbl_name,
int  from,
int  limit 
)

从数据库中列出某数据表中某个范围的结果集

参数
mdb{ACL_MDB*} 数据库句柄
tbl_name{const char*} 数据表名
from{int} 查询的结果希望是从该位置开始进行存储
limit{int} 查询的结果的最大希望个数
返回
{ACL_MDT_RES*} 查询结果集,如果为空则表明查询结果为空或出错

◆ acl_mdb_probe()

ACL_API int acl_mdb_probe ( ACL_MDB mdb,
const char *  tbl_name,
const char *  key_label,
const char *  key 
)

探测数据表中对应的字段值是否存在

参数
mdb{ACL_MDB*} 数据库句柄
tbl_name{const char*} 数据表名
key_label{const char*} 数据表索引字段名
key{const char*} 数据表索引字段键值
返回
{int} 0: 不存在, != 0: 存在

◆ acl_mdb_tbl_create()

ACL_API ACL_MDT* acl_mdb_tbl_create ( ACL_MDB mdb,
const char *  tbl_name,
unsigned int  tbl_flag,
size_t  init_capacity,
const char *  key_labels[],
unsigned int  flags[] 
)

在给定数据库上创建一个数据表

参数
mdb{ACL_MDB*} 数据库句柄
tbl_name{const char*} 表名
tbl_flag{unsigned int} 表的属性标志位
init_capacity{size_t} 数据表内针对每个索引键的内部哈希表的初始化容量
key_labels{const char *[]} 数据表字段名数组
flags{unsigned int[]} 与 key_labels 相对应的约束标志位
返回
{ACL_MDT*} 新建的数据表句柄

◆ acl_mdb_walk()

ACL_API int acl_mdb_walk ( ACL_MDB mdb,
const char *  tbl_name,
int(*)(const void *, unsigned int)  walk_fn,
int  from,
int  limit 
)

遍历数据库中某个数据表的所有数据结点

参数
mdb{ACL_MDB*} 数据库句柄
tbl_name{const char*} 数据表名
walk_fn遍历回调函数,如果该函数返回非0值,则停止遍历
from{int} 查询的结果希望是从该位置开始进行存储
limit{int} 查询的结果的最大希望个数
返回
{int} 遍历的数据结点数值

◆ acl_mdt_add()

ACL_API ACL_MDT_NOD* acl_mdt_add ( ACL_MDT mdt,
void *  data,
unsigned int  dlen,
const char *  key_labels[],
const char *  keys[] 
)

向数据表中添加一条新的数据记录

参数
mdt{ACL_MDT*} 数据表句柄
data{void*} 用户的动态数据, 如果表的 ACL_MDT_FLAG_DMR 标志位 未被设置,则将在内部拷贝一份该动态数据
dlen{unsigned int} data 的数据长度
key_labels{const char*[]} 数据表的索引字段名数组,以NULL结束
keys{const char*[]} 数据表的索引字段值数组,以NULL结束
返回
{ACL_MDT_NOD*} 新添加的数据结点对象

◆ acl_mdt_cnt()

ACL_API int acl_mdt_cnt ( ACL_MDT mdt)

数据表中所有元素的总数

参数
mdt{ACL_MDT*} 数据表句柄
返回
{int} >=0

◆ acl_mdt_create()

ACL_API ACL_MDT* acl_mdt_create ( const char *  dbtype,
const char *  tbl_name,
unsigned int  tbl_flag,
size_t  init_capacity,
const char *  key_labels[],
unsigned int  flags[] 
)

创建一个数据表

参数
dbtype{const char *} 表类型: hash/avl
tbl_name{const char*} 表名
tbl_flag{unsigned int} 表的属性标志位
init_capacity{size_t} 每个内部哈希表的初始化容量
key_labels{const char *[]} 表中的各个字段名数组,最后以NULL结束
flags{unsigned int[]} 与 key_labels 相对应的约束标志位
返回
{ACL_MDT*} 新建的数据表的句柄

◆ acl_mdt_delete()

ACL_API int acl_mdt_delete ( ACL_MDT mdt,
const char *  key_label,
const char *  key,
void(*)(void *, unsigned int)  onfree_fn 
)

从数据表中删除对应某个索引字段键值的结果集合

参数
mdt{ACL_MDT*} 数据表句柄
key_label{const char*} 数据表索引字段名
key{const char*} 数据表索引字段键值
onfree_fn{void (*)(void*, unsigned int} 用户用来释放动态数据的回调函数
返回
{int} 所释放的数据结点的数目

◆ acl_mdt_fetch_row()

ACL_API const void* acl_mdt_fetch_row ( ACL_MDT_RES res)

从所查询的结果集合中获取下一个数据结果

参数
res{ACL_MDT_RES*} 数据结果集合
返回
{void*} 用户自己能够识别的动态数据,若返回NULL表示出错或已经没有数据

◆ acl_mdt_find()

ACL_API ACL_MDT_RES* acl_mdt_find ( ACL_MDT mdt,
const char *  key_label,
const char *  key,
int  from,
int  limit 
)

从数据表中查询某个数据表索引键值的结果集合

参数
mdt{ACL_MDT*} 数据表句柄
key_label{const char*} 数据表索引字段名
key{const char*} 数据表索引字段键值
from{int} 查询的结果希望是从该位置开始进行存储
limit{int} 查询的结果的最大希望个数
返回
{ACL_MDT_REC*} 对应某个索引字段值的结果集合

◆ acl_mdt_free()

ACL_API void acl_mdt_free ( ACL_MDT mdt)

释放一个内存表

参数
mdt{ACL_MDT*} 内存数据表句柄

◆ acl_mdt_list()

ACL_API ACL_MDT_RES* acl_mdt_list ( ACL_MDT mdt,
int  from,
int  limit 
)

从数据表中顺序列出某个范围内的所有数据结点集合

参数
mdt{ACL_MDT*} 数据表句柄
from{int} 查询的结果希望是从该位置开始进行存储
limit{int} 查询的结果的最大希望个数
返回
{ACL_MDT_REC*} 对应某个索引字段值的结果集合

◆ acl_mdt_probe()

ACL_API int acl_mdt_probe ( ACL_MDT mdt,
const char *  key_label,
const char *  key 
)

探测数据表中对应的字段值是否存在

参数
mdt{ACL_MDT*} 数据表句柄
key_label{const char*} 数据表索引字段名
key{const char*} 数据表索引字段键值
返回
{int} 0: 不存在, != 0: 存在

◆ acl_mdt_res_free()

ACL_API void acl_mdt_res_free ( ACL_MDT_RES res)

释放查询结果动态内存,但并不释放实际的数据结点

参数
res{ACL_MDT_RES*} 数据结果集合

◆ acl_mdt_row_count()

ACL_API int acl_mdt_row_count ( ACL_MDT_RES res)

获得查询结果集中的记录数

参数
res{ACL_MDT_RES*} 数据结果集合
返回
{int} 0: 结果集为空; > 0: 结果集不为空

◆ acl_mdt_walk()

ACL_API int acl_mdt_walk ( ACL_MDT mdt,
int(*)(const void *, unsigned int)  walk_fn,
int  from,
int  len 
)

遍历数据表的所有数据结点,并回调用户的处理函数

参数
mdt{ACL_MDT*} 数据表句柄
walk_fn回调函数,如果返回0则继续,否则停止遍历
from{int} 查询的结果希望是从该位置开始进行存储
len{int} 查询的结果的最大希望个数
返回
{int} 所遍历的数据长度