acl  3.5.3.0
acl_htable.h 文件参考
#include "acl_define.h"
#include "../thread/acl_thread.h"
#include "acl_hash.h"
#include "acl_slice.h"
#include "acl_iterator.h"
+ acl_htable.h 的引用(Include)关系图:
+ 此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

struct  ACL_HTABLE
 
struct  ACL_HTABLE_INFO
 
struct  ACL_HTABLE_ITER
 

宏定义

#define ACL_HTABLE_FLAG_KEY_REUSE   (1 << 0)
 
#define ACL_HTABLE_FLAG_USE_LOCK   (1 << 1)
 
#define ACL_HTABLE_FLAG_MSLOOK   (1 << 2)
 
#define ACL_HTABLE_FLAG_KEY_LOWER   (1 << 3)
 
#define ACL_HTABLE_CTL_END   0
 
#define ACL_HTABLE_CTL_RWLOCK   1
 
#define ACL_HTABLE_CTL_HASH_FN   2
 
#define ACL_HTABLE_STAT_OK   0
 
#define ACL_HTABLE_STAT_INVAL   1
 
#define ACL_HTABLE_STAT_DUPLEX_KEY   2
 
#define acl_htable_delete_r   acl_htable_delete
 
#define acl_htable_reset_r   acl_htable_reset
 
#define acl_htable_walk_r   acl_htable_walk
 
#define acl_htable_stat_r   acl_htable_stat
 
#define ACL_HTABLE_ITER_KEY(iter)   ((iter).ptr->key.c_key)
 
#define acl_htable_iter_key   ACL_HTABLE_ITER_KEY
 
#define ACL_HTABLE_ITER_VALUE(iter)   ((iter).ptr->value)
 
#define acl_htable_iter_value   ACL_HTABLE_ITER_VALUE
 
#define ACL_HTABLE_FOREACH(iter, table_ptr)
 
#define ACL_HTABLE_FOREACH_REVERSE(iter, table_ptr)
 
#define acl_htable_foreach   ACL_HTABLE_FOREACH
 
#define acl_htable_foreach_reverse   ACL_HTABLE_FOREACH_REVERSE
 

类型定义

typedef struct ACL_HTABLE ACL_HTABLE
 
typedef struct ACL_HTABLE_INFO ACL_HTABLE_INFO
 
typedef struct ACL_HTABLE_ITER ACL_HTABLE_ITER
 

函数

ACL_API ACL_HTABLEacl_htable_create (int size, unsigned int flag)
 
ACL_API ACL_HTABLEacl_htable_create3 (int size, unsigned int flag, ACL_SLICE_POOL *slice)
 
ACL_API void acl_htable_ctl (ACL_HTABLE *table, int name,...)
 
ACL_API int acl_htable_errno (ACL_HTABLE *table)
 
ACL_API void acl_htable_set_errno (ACL_HTABLE *table, int error)
 
ACL_API ACL_HTABLE_INFOacl_htable_enter (ACL_HTABLE *table, const char *key, void *value)
 
ACL_API int acl_htable_enter_r (ACL_HTABLE *table, const char *key, void *value, void(*callback)(ACL_HTABLE_INFO *ht, void *arg), void *arg)
 
ACL_API ACL_HTABLE_INFOacl_htable_locate (ACL_HTABLE *table, const char *key)
 
ACL_API int acl_htable_locate_r (ACL_HTABLE *table, const char *key, void(*callback)(ACL_HTABLE_INFO *ht, void *arg), void *arg)
 
ACL_API void * acl_htable_find (ACL_HTABLE *table, const char *key)
 
ACL_API int acl_htable_find_r (ACL_HTABLE *table, const char *key, void(*callback)(void *value, void *arg), void *arg)
 
ACL_API int acl_htable_delete (ACL_HTABLE *table, const char *key, void(*free_fn)(void *))
 
ACL_API void acl_htable_delete_entry (ACL_HTABLE *table, ACL_HTABLE_INFO *ht, void(*free_fn)(void *))
 
ACL_API void acl_htable_free (ACL_HTABLE *table, void(*free_fn)(void *))
 
ACL_API int acl_htable_reset (ACL_HTABLE *table, void(*free_fn)(void *))
 
ACL_API void acl_htable_walk (ACL_HTABLE *table, void(*walk_fn)(ACL_HTABLE_INFO *, void *), void *arg)
 
ACL_API int acl_htable_size (const ACL_HTABLE *table)
 
ACL_API int acl_htable_used (const ACL_HTABLE *table)
 
ACL_API ACL_HTABLE_INFO ** acl_htable_list (const ACL_HTABLE *table)
 
ACL_API void acl_htable_stat (const ACL_HTABLE *table)
 
ACL_API ACL_HTABLE_INFO ** acl_htable_data (ACL_HTABLE *table)
 
ACL_API const ACL_HTABLE_INFOacl_htable_iter_head (ACL_HTABLE *table, ACL_HTABLE_ITER *iter)
 
ACL_API const ACL_HTABLE_INFOacl_htable_iter_next (ACL_HTABLE_ITER *iter)
 
ACL_API const ACL_HTABLE_INFOacl_htable_iter_tail (ACL_HTABLE *table, ACL_HTABLE_ITER *iter)
 
ACL_API const ACL_HTABLE_INFOacl_htable_iter_prev (ACL_HTABLE_ITER *iter)
 

宏定义说明

◆ ACL_HTABLE_CTL_END

#define ACL_HTABLE_CTL_END   0

控制结束标志

在文件 acl_htable.h109 行定义.

◆ ACL_HTABLE_CTL_HASH_FN

#define ACL_HTABLE_CTL_HASH_FN   2

设置私有哈希函数

在文件 acl_htable.h111 行定义.

◆ ACL_HTABLE_CTL_RWLOCK

#define ACL_HTABLE_CTL_RWLOCK   1

是否加锁

在文件 acl_htable.h110 行定义.

◆ acl_htable_delete_r

#define acl_htable_delete_r   acl_htable_delete

在文件 acl_htable.h212 行定义.

◆ ACL_HTABLE_FLAG_KEY_LOWER

#define ACL_HTABLE_FLAG_KEY_LOWER   (1 << 3)

在文件 acl_htable.h95 行定义.

◆ ACL_HTABLE_FLAG_KEY_REUSE

#define ACL_HTABLE_FLAG_KEY_REUSE   (1 << 0)

在文件 acl_htable.h86 行定义.

◆ ACL_HTABLE_FLAG_MSLOOK

#define ACL_HTABLE_FLAG_MSLOOK   (1 << 2)

在文件 acl_htable.h92 行定义.

◆ ACL_HTABLE_FLAG_USE_LOCK

#define ACL_HTABLE_FLAG_USE_LOCK   (1 << 1)

在文件 acl_htable.h89 行定义.

◆ ACL_HTABLE_FOREACH

#define ACL_HTABLE_FOREACH (   iter,
  table_ptr 
)
值:
if (table_ptr) \
for((void) acl_htable_iter_head((table_ptr), &iter); \
(iter).ptr; \
(void) acl_htable_iter_next(&iter))
ACL_API const ACL_HTABLE_INFO * acl_htable_iter_head(ACL_HTABLE *table, ACL_HTABLE_ITER *iter)
ACL_API const ACL_HTABLE_INFO * acl_htable_iter_next(ACL_HTABLE_ITER *iter)

在文件 acl_htable.h336 行定义.

◆ acl_htable_foreach

#define acl_htable_foreach   ACL_HTABLE_FOREACH

在文件 acl_htable.h348 行定义.

◆ ACL_HTABLE_FOREACH_REVERSE

#define ACL_HTABLE_FOREACH_REVERSE (   iter,
  table_ptr 
)
值:
if (table_ptr) \
for((void) acl_htable_iter_tail((table_ptr), &iter); \
(iter).ptr; \
(void) acl_htable_iter_prev(&iter))
ACL_API const ACL_HTABLE_INFO * acl_htable_iter_prev(ACL_HTABLE_ITER *iter)
ACL_API const ACL_HTABLE_INFO * acl_htable_iter_tail(ACL_HTABLE *table, ACL_HTABLE_ITER *iter)

在文件 acl_htable.h341 行定义.

◆ acl_htable_foreach_reverse

#define acl_htable_foreach_reverse   ACL_HTABLE_FOREACH_REVERSE

在文件 acl_htable.h349 行定义.

◆ ACL_HTABLE_ITER_KEY

#define ACL_HTABLE_ITER_KEY (   iter)    ((iter).ptr->key.c_key)

在文件 acl_htable.h290 行定义.

◆ acl_htable_iter_key

#define acl_htable_iter_key   ACL_HTABLE_ITER_KEY

在文件 acl_htable.h291 行定义.

◆ ACL_HTABLE_ITER_VALUE

#define ACL_HTABLE_ITER_VALUE (   iter)    ((iter).ptr->value)

在文件 acl_htable.h293 行定义.

◆ acl_htable_iter_value

#define acl_htable_iter_value   ACL_HTABLE_ITER_VALUE

在文件 acl_htable.h294 行定义.

◆ acl_htable_reset_r

#define acl_htable_reset_r   acl_htable_reset

在文件 acl_htable.h240 行定义.

◆ ACL_HTABLE_STAT_DUPLEX_KEY

#define ACL_HTABLE_STAT_DUPLEX_KEY   2

重复键

在文件 acl_htable.h121 行定义.

◆ ACL_HTABLE_STAT_INVAL

#define ACL_HTABLE_STAT_INVAL   1

无效参数

在文件 acl_htable.h120 行定义.

◆ ACL_HTABLE_STAT_OK

#define ACL_HTABLE_STAT_OK   0

状态正常

在文件 acl_htable.h119 行定义.

◆ acl_htable_stat_r

#define acl_htable_stat_r   acl_htable_stat

在文件 acl_htable.h278 行定义.

◆ acl_htable_walk_r

#define acl_htable_walk_r   acl_htable_walk

在文件 acl_htable.h250 行定义.

类型定义说明

◆ ACL_HTABLE

typedef struct ACL_HTABLE ACL_HTABLE

在文件 acl_htable.h15 行定义.

◆ ACL_HTABLE_INFO

在文件 acl_htable.h16 行定义.

◆ ACL_HTABLE_ITER

函数说明

◆ acl_htable_create()

ACL_API ACL_HTABLE* acl_htable_create ( int  size,
unsigned int  flag 
)

建立哈希表

参数
size哈希表长度
flag{unsigned int} 哈希表属性标志位, ACL_BINHASH_FLAG_xxx
返回
所建哈希表的头指针或为空(这时表示出了严重的错误, 主要是内存分配问题)
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_create3()

ACL_API ACL_HTABLE* acl_htable_create3 ( int  size,
unsigned int  flag,
ACL_SLICE_POOL slice 
)

◆ acl_htable_ctl()

ACL_API void acl_htable_ctl ( ACL_HTABLE table,
int  name,
  ... 
)

设置哈希表的控制参数

参数
table哈希表对象句柄
name控制参数的变参初始值, name 及以后的控制参数如下定义 ACL_HTABLE_CTL_END: 变参表结束标志 ACL_HTABLE_CTL_RWLOCK: 是否启用读写锁机制 ACL_HTABLE_CTL_HASH_FN: 用户自定义的哈希值计算函数
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_data()

◆ acl_htable_delete()

ACL_API int acl_htable_delete ( ACL_HTABLE table,
const char *  key,
void(*)(void *)  free_fn 
)

根据所给的 key 键删除某一哈希项

参数
table哈希表指针
key
free_fn如果该函数指针不为空并且找到了对应于 key 键的数据项, 则先 调用用户所提供的析构函数做一些清尾工作, 然后再释放该哈希项
返回
0: 成功; -1: 未找到该 key 键
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_delete_entry()

ACL_API void acl_htable_delete_entry ( ACL_HTABLE table,
ACL_HTABLE_INFO ht,
void(*)(void *)  free_fn 
)

直接根据 acl_htable_locate 返回的非空对象从哈希表中删除该对象

参数
table哈希表指针
ht{ACL_HTABLE_INFO*} 存储于哈希表中的内部结构对象
free_fn如果该函数指针不为空并且找到了对应于 key 键的数据项, 则先 调用用户所提供的析构函数做一些清尾工作, 然后再释放该哈希项
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_enter()

ACL_API ACL_HTABLE_INFO* acl_htable_enter ( ACL_HTABLE table,
const char *  key,
void *  value 
)

往哈希表里添加新的项

参数
table哈希表指针
key键, 在函数内部会复制此 key 键
value用户自己的特定数据项(可以由类型硬转化而来, 但是此数据项必须 不能堆栈变量)
返回
所分配的哈希表项的指针, == NULL: 表示内部分配内存出错, 为严重的错误 注:如果在添加时该哈希争键存在,则返回已经存在的哈希项,使用者应该通过调用 acl_htable_last_errno() 来查看是否重复添加同一个键值(ACL_HTABLE_STAT_DUPLEX_KEY)
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_enter_r()

ACL_API int acl_htable_enter_r ( ACL_HTABLE table,
const char *  key,
void *  value,
void(*)(ACL_HTABLE_INFO *ht, void *arg)  callback,
void *  arg 
)

往哈希表里添加新的项,当多个线程同时进行此操作时,函数内部会自动保证互斥操作

参数
table哈希表指针
key键, 在函数内部会复制此 key 键
value用户自己的特定数据项(可以由类型硬转化而来, 但是此数据项必须 不能堆栈变量)
callback如果该函数指针不为空,则当添加成功后便调用该函数
argcallback 的参数之一
返回
{int} 0 表示 添加成功,-1 表示添加失败 注:如果在添加时该哈希争键存在,则返回已经存在的哈希项,使用者应该通过调用 acl_htable_last_errno() 来查看是否重复添加同一个键值(ACL_HTABLE_STAT_DUPLEX_KEY)
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_errno()

ACL_API int acl_htable_errno ( ACL_HTABLE table)

检查上一次哈希表操作后哈希表的状态

参数
table哈希表指针
返回
{int} 操作哈希表后的状态, 参见如下的 ACL_HTABLE_STAT_XXX
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_find()

ACL_API void* acl_htable_find ( ACL_HTABLE table,
const char *  key 
)

由所给的 key 键查寻用户的数据项

参数
table哈希表指针
key
返回
不为空: 表示查到了对应于 key 键的数据项, 用户可以根据用户自己的 数据类型进行转换; 为空: 表示未查到对应于 key 键的数据项
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_find_r()

ACL_API int acl_htable_find_r ( ACL_HTABLE table,
const char *  key,
void(*)(void *value, void *arg)  callback,
void *  arg 
)

由所给的 key 键查寻用户的数据项, 当多个线程同时进行此操作时, 函数内部会自动保证互斥操作

参数
table哈希表指针
key
callback当查到所要求的键值后,如果该函数指针不为空则调用之
argcallback 的参数之一
返回
不为空: 表示查到了对应于 key 键的数据项, 用户可以根据用户自己的 数据类型进行转换; 为空: 表示未查到对应于 key 键的数据项
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_free()

ACL_API void acl_htable_free ( ACL_HTABLE table,
void(*)(void *)  free_fn 
)

释放整个哈希表

参数
table哈希表指针
free_fn如果该指针不为空则对哈希表中的每一项哈希项先用该函数做 清尾工作, 然后再释放
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_iter_head()

ACL_API const ACL_HTABLE_INFO* acl_htable_iter_head ( ACL_HTABLE table,
ACL_HTABLE_ITER iter 
)

◆ acl_htable_iter_next()

ACL_API const ACL_HTABLE_INFO* acl_htable_iter_next ( ACL_HTABLE_ITER iter)

◆ acl_htable_iter_prev()

ACL_API const ACL_HTABLE_INFO* acl_htable_iter_prev ( ACL_HTABLE_ITER iter)

◆ acl_htable_iter_tail()

ACL_API const ACL_HTABLE_INFO* acl_htable_iter_tail ( ACL_HTABLE table,
ACL_HTABLE_ITER iter 
)

◆ acl_htable_list()

ACL_API ACL_HTABLE_INFO** acl_htable_list ( const ACL_HTABLE table)

将哈希表里的所有项组合成一个链表

参数
table哈希表
返回
不为空: 链表指针; 为空: 表示该哈希表里没有哈希项
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_locate()

ACL_API ACL_HTABLE_INFO* acl_htable_locate ( ACL_HTABLE table,
const char *  key 
)

由所给的 key 键查寻某一特定哈希项

参数
table哈希表指针
key
返回
不为空指针: 表示查到了对应于 key 键的哈希项 为空: 表示未查到对应于 key 键的哈希项
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_locate_r()

ACL_API int acl_htable_locate_r ( ACL_HTABLE table,
const char *  key,
void(*)(ACL_HTABLE_INFO *ht, void *arg)  callback,
void *  arg 
)

由所给的 key 键查寻某一特定哈希项,当多个线程同时进行此操作时, 函数内部会自动保证互斥操作

参数
table哈希表指针
key
callback查到所要求的键值后如果该指针非空则调用之
argcallback 参数之一
返回
不为空指针: 表示查到了对应于 key 键的哈希项 为空: 表示未查到对应于 key 键的哈希项
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_reset()

ACL_API int acl_htable_reset ( ACL_HTABLE table,
void(*)(void *)  free_fn 
)

重置哈希表, 该函数会释放哈希表中的所有内容项, 并重新初始化

参数
table哈希表指针
free_fn如果该指针不为空则对哈希表中的每一项哈希项先用该函数做 清尾工作, 然后再释放
返回
是否重置成功. 0: OK; < 0: error.
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_set_errno()

ACL_API void acl_htable_set_errno ( ACL_HTABLE table,
int  error 
)

设置哈希表的当前状态, error 取值 ACL_HTABLE_STAT_XXX

参数
table哈希表指针
error设置哈希表的错误状态
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_size()

ACL_API int acl_htable_size ( const ACL_HTABLE table)

返回哈希表当前的容器空间大小

参数
table哈希表指针
返回
哈希表的容器空间大小
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_stat()

ACL_API void acl_htable_stat ( const ACL_HTABLE table)

显示哈希表中 key 键的分布状态

参数
table哈希表指针
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_used()

ACL_API int acl_htable_used ( const ACL_HTABLE table)

返回哈希表当前的窗口中所含元素个数

参数
table哈希表指针
返回
哈希表中元素个数
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.

◆ acl_htable_walk()

ACL_API void acl_htable_walk ( ACL_HTABLE table,
void(*)(ACL_HTABLE_INFO *, void *)  walk_fn,
void *  arg 
)

对哈希表中的每一项哈希项进行处理

参数
table哈希表指针
walk_fn处理每一项哈希项的函数指针, 不能为空
arg用户自己类型的数据
示例
F:/download/acl/help/include/acl/stdlib/acl_htable.h.