acl  3.5.3.0
acl_iterator.h
浏览该文件的文档.
1 #ifndef ACL_ITERATOR_INCLUDE_H
2 #define ACL_ITERATOR_INCLUDE_H
3 
4 typedef struct ACL_ITER ACL_ITER;
5 
6 /**
7  * ACL 库中数据结构用的通用迭代器结构定义
8  */
9 struct ACL_ITER {
10  void *ptr; /**< 迭代器指针, 与容器相关 */
11  void *data; /**< 用户数据指针 */
12  int dlen; /**< 用户数据长度, 实现者可设置此值也可不设置 */
13  const char *key; /**< 若为哈希表的迭代器, 则为哈希键值地址 */
14  int klen; /**< 若为ACL_BINHASH迭代器, 则为键长度 */
15  int i; /**< 当前迭代器在容器中的位置索引 */
16  int size; /**< 当前容器中元素总个数 */
17 };
18 
19 /**
20  * 正向遍历容器中元素
21  * @param iter {ACL_ITER}
22  * @param container {void*} 容器地址
23  * @examples: samples/iterator/
24  */
25 #define ACL_FOREACH(iter, container) \
26  for ((container)->iter_head(&(iter), (container)); \
27  (iter).ptr; \
28  (container)->iter_next(&(iter), (container)))
29 
30 /**
31  * 反向遍历容器中元素
32  * @param iter {ACL_ITER}
33  * @param container {void*} 容器地址
34  * @examples: samples/iterator/
35  */
36 #define ACL_FOREACH_REVERSE(iter, container) \
37  for ((container)->iter_tail(&(iter), (container)); \
38  (iter).ptr; \
39  (container)->iter_prev(&(iter), (container)))
40 
41 /**
42  * 获得当前迭代指针与某容器关联的成员结构类型对象
43  * @param iter {ACL_ITER}
44  * @param container {void*} 容器地址
45  */
46 #define ACL_ITER_INFO(iter, container) \
47  (container)->iter_info(&(iter), (container))
48 
49 #define acl_foreach_reverse ACL_FOREACH_REVERSE
50 #define acl_foreach ACL_FOREACH
51 #define acl_iter_info ACL_ITER_INFO
52 
53 #endif
void * ptr
Definition: acl_iterator.h:10
const char * key
Definition: acl_iterator.h:13
void * data
Definition: acl_iterator.h:11