00001 #ifndef CTL_ISET_H
00002 #define CTL_ISET_H
00003
00014 #ifndef CTL_TREE_H
00015 #include "ctl/tree.h"
00016 #endif
00017
00025 #define ctl_iset(type,mlabel,compare) ctl_tree(ctlt_relative(offsetof(type,mlabel)),ctlt_unique)
00026
00033 #define ctl_iset_decllink(type,mlabel)\
00034 ctlt_node_type(ctlt_relative(offsetof(type,mlabel)),ctlt_unique) mlabel
00035
00043 #define ctl_iset_initlink(type,mlabel, curr) ctl_tree_node_init(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, &curr->mlabel)
00044
00054 #define ctl_iset_auto(type,mlabel,compare, ilabel)\
00055 ctl_tree_auto(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, compare, ilabel )
00056
00065 #define ctl_iset_init(type,mlabel,compare, ilabel)\
00066 ctl_tree_init(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, compare, ilabel )
00067
00075 #define ctl_iset_size(type,mlabel, ilabel) ctl_tree_size(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, ilabel )
00076
00086 #define ctl_iset_insert(type,mlabel, ilabel, data) (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, insert)( (ilabel), (data) )
00087
00097 #define ctl_iset_find(type,mlabel, ilabel, value) (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, find)( (ilabel), (value) )
00098
00108 #define ctl_iset_remove(type,mlabel, ilabel, value) (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, remove)( (ilabel), (value) )
00109
00119 #define ctl_iset_unlink(type,mlabel, ilabel, data) (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, unlink)( (ilabel), (data) )
00120
00128 #define ctl_iset_reset(type,mlabel, ilabel) ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, reset)( ilabel )
00129
00137 #define ctl_iset_front(type,mlabel, ilabel) ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, front)( ilabel )
00138
00146 #define ctl_iset_back(type,mlabel, ilabel) ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, back)( ilabel )
00147
00155 #define ctl_iset_pop_front(type,mlabel, ilabel) ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, pop_front)( ilabel )
00156
00164 #define ctl_iset_pop_back(type,mlabel, ilabel) ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, pop_back)( ilabel )
00165
00166
00176 #define ctl_iset_foreach(type,mlabel, ilabel, label ) \
00177 ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator ) ppConcat(stack_,label);\
00178 type* label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_begin)( &ppConcat(stack_,label), (ilabel) );\
00179 for ( ; label; label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_next)( &ppConcat(stack_,label) ) )
00180
00190 #define ctl_iset_foreach_const(type,mlabel, ilabel, label ) \
00191 ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator ) ppConcat(stack_,label);\
00192 const type* label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_begin)( &ppConcat(stack_,label), (ilabel) );\
00193 for ( ; label; label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_next)( &ppConcat(stack_,label) ) )
00194
00204 #define ctl_iset_foreach_reverse(type,mlabel, ilabel, label ) \
00205 ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator ) ppConcat(stack_,label);\
00206 type* label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_rbegin)( &ppConcat(stack_,label), (ilabel) );\
00207 for ( ; label; label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_prev)( &ppConcat(stack_,label) ) )
00208
00218 #define ctl_iset_foreach_reverse_const(type,mlabel, ilabel, label ) \
00219 ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator ) ppConcat(stack_,label);\
00220 const type* label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_rbegin)( &ppConcat(stack_,label), (ilabel) );\
00221 for ( ; label; label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_prev)( &ppConcat(stack_,label) ) )
00222
00223
00233 #define ctl_iset_from(type,mlabel, ilabel, from, label )\
00234 ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator ) ppConcat(stack_,label);\
00235 type* label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_begin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00236 for ( ; label; label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_next)( &ppConcat(stack_,label) ) )
00237
00240 #define ctl_iset_from_const(type,mlabel, ilabel, from, label )\
00241 ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator ) ppConcat(stack_,label);\
00242 const type* label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_begin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00243 for ( ; label; label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_next)( &ppConcat(stack_,label) ) )
00244
00247 #define ctl_iset_from_reverse(type,mlabel, ilabel, from, label )\
00248 ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator ) ppConcat(stack_,label);\
00249 type* label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_rbegin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00250 for ( ; label; label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_prev)( &ppConcat(stack_,label) ) )
00251
00254 #define ctl_iset_from_reverse_const(type,mlabel, ilabel, from, label )\
00255 ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator ) ppConcat(stack_,label);\
00256 const type* label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_rbegin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00257 for ( ; label; label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_prev)( &ppConcat(stack_,label) ) )
00258
00271 #define ctl_iset_from_to(type,mlabel, ilabel, from, to, label )\
00272 ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator ) ppConcat(stack_,label);\
00273 type* label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_begin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00274 for( ; label && (ilabel)->compare(label,(to)) < 0; label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_next)( &ppConcat(stack_,label) ) )
00275
00278 #define ctl_iset_from_to_const(type,mlabel, ilabel, from, to, label )\
00279 ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator ) ppConcat(stack_,label);\
00280 const type* label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_begin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00281 for( ; label && (ilabel)->compare(label,(to)) < 0; label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_next)( &ppConcat(stack_,label) ) )
00282
00285 #define ctl_iset_from_to_reverse(type,mlabel, ilabel, from, to, label )\
00286 ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator ) ppConcat(stack_,label);\
00287 type* label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_rbegin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00288 for( ; label && (ilabel)->compare(label,(to)) > 0; label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_prev)( &ppConcat(stack_,label) ) )
00289
00293 #define ctl_iset_from_to_reverse_const(type,mlabel, ilabel, from, to, label )\
00294 ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator ) ppConcat(stack_,label);\
00295 const type* label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_rbegin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00296 for( ; label && (ilabel)->compare(label,(to)) > 0; label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_unique, iterator_prev)( &ppConcat(stack_,label) ) )
00297
00298 #endif
00299
00300