acl
3.5.3.0
|
#include "acl_define.h"
#include "../thread/acl_thread.h"
#include "acl_hash.h"
#include "acl_slice.h"
#include "acl_iterator.h"
类 | |
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_HTABLE * | acl_htable_create (int size, unsigned int flag) |
ACL_API ACL_HTABLE * | acl_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_INFO * | acl_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_INFO * | acl_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_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_API const ACL_HTABLE_INFO * | acl_htable_iter_tail (ACL_HTABLE *table, ACL_HTABLE_ITER *iter) |
ACL_API const ACL_HTABLE_INFO * | acl_htable_iter_prev (ACL_HTABLE_ITER *iter) |
#define ACL_HTABLE_CTL_END 0 |
控制结束标志
在文件 acl_htable.h 第 109 行定义.
#define ACL_HTABLE_CTL_HASH_FN 2 |
设置私有哈希函数
在文件 acl_htable.h 第 111 行定义.
#define ACL_HTABLE_CTL_RWLOCK 1 |
是否加锁
在文件 acl_htable.h 第 110 行定义.
#define acl_htable_delete_r acl_htable_delete |
在文件 acl_htable.h 第 212 行定义.
#define ACL_HTABLE_FLAG_KEY_LOWER (1 << 3) |
在文件 acl_htable.h 第 95 行定义.
#define ACL_HTABLE_FLAG_KEY_REUSE (1 << 0) |
在文件 acl_htable.h 第 86 行定义.
#define ACL_HTABLE_FLAG_MSLOOK (1 << 2) |
在文件 acl_htable.h 第 92 行定义.
#define ACL_HTABLE_FLAG_USE_LOCK (1 << 1) |
在文件 acl_htable.h 第 89 行定义.
#define ACL_HTABLE_FOREACH | ( | iter, | |
table_ptr | |||
) |
在文件 acl_htable.h 第 336 行定义.
#define acl_htable_foreach ACL_HTABLE_FOREACH |
在文件 acl_htable.h 第 348 行定义.
#define ACL_HTABLE_FOREACH_REVERSE | ( | iter, | |
table_ptr | |||
) |
在文件 acl_htable.h 第 341 行定义.
#define acl_htable_foreach_reverse ACL_HTABLE_FOREACH_REVERSE |
在文件 acl_htable.h 第 349 行定义.
#define ACL_HTABLE_ITER_KEY | ( | iter | ) | ((iter).ptr->key.c_key) |
在文件 acl_htable.h 第 290 行定义.
#define acl_htable_iter_key ACL_HTABLE_ITER_KEY |
在文件 acl_htable.h 第 291 行定义.
#define ACL_HTABLE_ITER_VALUE | ( | iter | ) | ((iter).ptr->value) |
在文件 acl_htable.h 第 293 行定义.
#define acl_htable_iter_value ACL_HTABLE_ITER_VALUE |
在文件 acl_htable.h 第 294 行定义.
#define acl_htable_reset_r acl_htable_reset |
在文件 acl_htable.h 第 240 行定义.
#define ACL_HTABLE_STAT_DUPLEX_KEY 2 |
重复键
在文件 acl_htable.h 第 121 行定义.
#define ACL_HTABLE_STAT_INVAL 1 |
无效参数
在文件 acl_htable.h 第 120 行定义.
#define ACL_HTABLE_STAT_OK 0 |
状态正常
在文件 acl_htable.h 第 119 行定义.
#define acl_htable_stat_r acl_htable_stat |
在文件 acl_htable.h 第 278 行定义.
#define acl_htable_walk_r acl_htable_walk |
在文件 acl_htable.h 第 250 行定义.
typedef struct ACL_HTABLE ACL_HTABLE |
在文件 acl_htable.h 第 15 行定义.
typedef struct ACL_HTABLE_INFO ACL_HTABLE_INFO |
在文件 acl_htable.h 第 16 行定义.
typedef struct ACL_HTABLE_ITER ACL_HTABLE_ITER |
ACL_API ACL_HTABLE* acl_htable_create | ( | int | size, |
unsigned int | flag | ||
) |
建立哈希表
size | 哈希表长度 |
flag | {unsigned int} 哈希表属性标志位, ACL_BINHASH_FLAG_xxx |
ACL_API ACL_HTABLE* acl_htable_create3 | ( | int | size, |
unsigned int | flag, | ||
ACL_SLICE_POOL * | slice | ||
) |
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: 用户自定义的哈希值计算函数 |
ACL_API ACL_HTABLE_INFO** acl_htable_data | ( | ACL_HTABLE * | table | ) |
ACL_API int acl_htable_delete | ( | ACL_HTABLE * | table, |
const char * | key, | ||
void(*)(void *) | free_fn | ||
) |
根据所给的 key 键删除某一哈希项
table | 哈希表指针 |
key | 键 |
free_fn | 如果该函数指针不为空并且找到了对应于 key 键的数据项, 则先 调用用户所提供的析构函数做一些清尾工作, 然后再释放该哈希项 |
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 键的数据项, 则先 调用用户所提供的析构函数做一些清尾工作, 然后再释放该哈希项 |
ACL_API ACL_HTABLE_INFO* acl_htable_enter | ( | ACL_HTABLE * | table, |
const char * | key, | ||
void * | value | ||
) |
往哈希表里添加新的项
table | 哈希表指针 |
key | 键, 在函数内部会复制此 key 键 |
value | 用户自己的特定数据项(可以由类型硬转化而来, 但是此数据项必须 不能堆栈变量) |
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 | 如果该函数指针不为空,则当添加成功后便调用该函数 |
arg | callback 的参数之一 |
ACL_API int acl_htable_errno | ( | ACL_HTABLE * | table | ) |
检查上一次哈希表操作后哈希表的状态
table | 哈希表指针 |
ACL_API void* acl_htable_find | ( | ACL_HTABLE * | table, |
const char * | key | ||
) |
由所给的 key 键查寻用户的数据项
table | 哈希表指针 |
key | 键 |
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 | 当查到所要求的键值后,如果该函数指针不为空则调用之 |
arg | callback 的参数之一 |
ACL_API void acl_htable_free | ( | ACL_HTABLE * | table, |
void(*)(void *) | free_fn | ||
) |
释放整个哈希表
table | 哈希表指针 |
free_fn | 如果该指针不为空则对哈希表中的每一项哈希项先用该函数做 清尾工作, 然后再释放 |
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_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_API ACL_HTABLE_INFO** acl_htable_list | ( | const ACL_HTABLE * | table | ) |
将哈希表里的所有项组合成一个链表
table | 哈希表 |
ACL_API ACL_HTABLE_INFO* acl_htable_locate | ( | ACL_HTABLE * | table, |
const char * | key | ||
) |
由所给的 key 键查寻某一特定哈希项
table | 哈希表指针 |
key | 键 |
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 | 查到所要求的键值后如果该指针非空则调用之 |
arg | callback 参数之一 |
ACL_API int acl_htable_reset | ( | ACL_HTABLE * | table, |
void(*)(void *) | free_fn | ||
) |
重置哈希表, 该函数会释放哈希表中的所有内容项, 并重新初始化
table | 哈希表指针 |
free_fn | 如果该指针不为空则对哈希表中的每一项哈希项先用该函数做 清尾工作, 然后再释放 |
ACL_API void acl_htable_set_errno | ( | ACL_HTABLE * | table, |
int | error | ||
) |
设置哈希表的当前状态, error 取值 ACL_HTABLE_STAT_XXX
table | 哈希表指针 |
error | 设置哈希表的错误状态 |
ACL_API int acl_htable_size | ( | const ACL_HTABLE * | table | ) |
ACL_API void acl_htable_stat | ( | const ACL_HTABLE * | table | ) |
ACL_API int acl_htable_used | ( | const ACL_HTABLE * | table | ) |
ACL_API void acl_htable_walk | ( | ACL_HTABLE * | table, |
void(*)(ACL_HTABLE_INFO *, void *) | walk_fn, | ||
void * | arg | ||
) |
对哈希表中的每一项哈希项进行处理
table | 哈希表指针 |
walk_fn | 处理每一项哈希项的函数指针, 不能为空 |
arg | 用户自己类型的数据 |