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 */