10 #define UL_ITBASE_UL_DEC(cust_prefix, cust_container_t, cust_item_t) \
11 typedef struct { cust_container_t *container; cust_item_t *item;}\
13 static inline cust_item_t * \
14 cust_prefix##_it2item(const cust_prefix##_it_t *it)\
19 cust_prefix##_first_it(cust_container_t *container, cust_prefix##_it_t *it)\
21 it->container=container;\
22 it->item=cust_prefix##_first(container);\
25 cust_prefix##_last_it(cust_container_t *container, cust_prefix##_it_t *it)\
27 it->container=container;\
28 it->item=cust_prefix##_last(container);\
31 cust_prefix##_next_it(cust_prefix##_it_t *it)\
33 if(it->item) it->item=cust_prefix##_next(it->container,it->item);\
34 else it->item=cust_prefix##_first(it->container);\
37 cust_prefix##_prev_it(cust_prefix##_it_t *it)\
39 if(it->item) it->item=cust_prefix##_prev(it->container,it->item);\
40 else it->item=cust_prefix##_last(it->container);\
43 cust_prefix##_is_end_it(cust_prefix##_it_t *it)\
48 cust_prefix##_delete_it(cust_prefix##_it_t *it)\
51 if(!(p=it->item)) return;\
52 it->item=cust_prefix##_next(it->container,it->item);\
53 cust_prefix##_delete(it->container,p);\
56 #define UL_ITBASE_SORT_DEC(cust_prefix, cust_container_t, cust_item_t, cust_key_t) \
57 UL_ITBASE_UL_DEC(cust_prefix, cust_container_t, cust_item_t) \
59 cust_prefix##_find_it(cust_container_t *container, cust_key_t *key, cust_prefix##_it_t *it)\
61 it->container=container;\
62 return (it->item=cust_prefix##_find(container, key))!=0;\
65 cust_prefix##_find_first_it(cust_container_t *container, cust_key_t *key, cust_prefix##_it_t *it)\
67 it->container=container;\
68 return (it->item=cust_prefix##_find_first(container, key))!=0;\
71 cust_prefix##_find_after_it(cust_container_t *container, cust_key_t *key, cust_prefix##_it_t *it)\
73 it->container=container;\
74 return (it->item=cust_prefix##_find_after(container, key))!=0;\
77 #define ul_for_each_it(cust_prefix, root, it) \
78 for(cust_prefix##_first_it(root,&it);\
79 !cust_prefix##_is_end_it(&it);cust_prefix##_next_it(&it))
81 #define ul_for_each_rev_it(cust_prefix, root, it) \
82 for(cust_prefix##_last_it(root,&it);\
83 !cust_prefix##_is_end_it(&it);cust_prefix##_prev_it(&it))
85 #define ul_for_each_from_it(cust_prefix, root, key, it) \
86 for(cust_prefix##_find_first_it(root, key, &it);\
87 !cust_prefix##_is_end_it(&it);cust_prefix##_next_it(&it))
89 #define ul_for_each_after_it(cust_prefix, root, key, it) \
90 for(cust_prefix##_find_after_it(root, key, &it);\
91 !cust_prefix##_is_end_it(&it);cust_prefix##_next_it(&it))
97 #endif /* _UL_ITBASE_H */