imultiset.h

Go to the documentation of this file.
00001 #ifndef CTL_IMULTISET_H
00002 #define CTL_IMULTISET_H
00003 
00015 #ifndef CTL_TREE_H
00016 #include "ctl/tree.h"
00017 #endif
00018 
00026 #define ctl_imultiset(type,mlabel,compare)  ctl_tree(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple)
00027 
00034 #define ctl_imultiset_decllink(type,mlabel)\
00035     ctlt_node_type(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple)  mlabel
00036 
00044 #define ctl_imultiset_initlink(type,mlabel, curr)       ctl_tree_node_init(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, &curr->mlabel)
00045 
00055 #define ctl_imultiset_auto(type,mlabel,compare, ilabel)\
00056     ctl_tree_auto(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, compare, ilabel )
00057 
00066 #define ctl_imultiset_init(type,mlabel,compare, ilabel)\
00067     ctl_tree_init(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, compare, ilabel )
00068 
00076 #define ctl_imultiset_size(type,mlabel, ilabel) ctl_tree_size(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, ilabel )
00077 
00087 #define ctl_imultiset_insert(type,mlabel, ilabel, data) (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, insert)( (ilabel), (data) )
00088 
00098 #define ctl_imultiset_find(type,mlabel, ilabel, value)  (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, find)( (ilabel), (value) )
00099 
00109 #define ctl_imultiset_remove(type,mlabel, ilabel, value)    (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, remove)( (ilabel), (value) )
00110 
00120 #define ctl_imultiset_unlink(type,mlabel, ilabel, data) (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, unlink)( (ilabel), (data) )
00121 
00129 #define ctl_imultiset_reset(type,mlabel, ilabel)            ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, reset)( ilabel )
00130 
00138 #define ctl_imultiset_front(type,mlabel, ilabel)            ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, front)( ilabel )
00139 
00147 #define ctl_imultiset_back(type,mlabel, ilabel)         ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, back)( ilabel )
00148 
00156 #define ctl_imultiset_pop_front(type,mlabel, ilabel)        ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, pop_front)( ilabel )
00157 
00165 #define ctl_imultiset_pop_back(type,mlabel, ilabel)     ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, pop_back)( ilabel )
00166 
00176 #define ctl_imultiset_foreach(type,mlabel, ilabel, label ) \
00177     ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator ) ppConcat(stack_,label);\
00178     type* label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_begin)( &ppConcat(stack_,label), (ilabel) );\
00179     for ( ; label; label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_next)( &ppConcat(stack_,label) ) )
00180 
00190 #define ctl_imultiset_foreach_const(type,mlabel, ilabel, label ) \
00191     ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator ) ppConcat(stack_,label);\
00192     const type* label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_begin)( &ppConcat(stack_,label), (ilabel) );\
00193     for ( ; label; label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_next)( &ppConcat(stack_,label) ) )
00194 
00204 #define ctl_imultiset_foreach_reverse(type,mlabel, ilabel, label ) \
00205     ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator ) ppConcat(stack_,label);\
00206     type* label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_rbegin)( &ppConcat(stack_,label), (ilabel) );\
00207     for ( ; label; label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_prev)( &ppConcat(stack_,label) ) )
00208 
00218 #define ctl_imultiset_foreach_reverse_const(type,mlabel, ilabel, label ) \
00219     ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator ) ppConcat(stack_,label);\
00220     const type* label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_rbegin)( &ppConcat(stack_,label), (ilabel) );\
00221     for ( ; label; label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_prev)( &ppConcat(stack_,label) ) )
00222 
00232 #define ctl_imultiset_from(type,mlabel, ilabel, from, label )\
00233     ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator ) ppConcat(stack_,label);\
00234     type* label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_begin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00235     for ( ; label; label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_next)( &ppConcat(stack_,label) ) )
00236 
00239 #define ctl_imultiset_from_const(type,mlabel, ilabel, from, label )\
00240     ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator ) ppConcat(stack_,label);\
00241     const type* label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_begin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00242     for ( ; label; label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_next)( &ppConcat(stack_,label) ) )
00243 
00246 #define ctl_imultiset_from_reverse(type,mlabel, ilabel, from, label )\
00247     ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator ) ppConcat(stack_,label);\
00248     type* label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_rbegin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00249     for ( ; label; label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_prev)( &ppConcat(stack_,label) ) )
00250 
00253 #define ctl_imultiset_from_reverse_const(type,mlabel, ilabel, from, label )\
00254     ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator ) ppConcat(stack_,label);\
00255     const type* label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_rbegin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00256     for ( ; label; label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_prev)( &ppConcat(stack_,label) ) )
00257 
00270 #define ctl_imultiset_from_to(type,mlabel, ilabel, from, to, label )\
00271     ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator ) ppConcat(stack_,label);\
00272     type* label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_begin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00273     for( ; label && (ilabel)->compare(label,(to)) < 0; label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_next)( &ppConcat(stack_,label) ) )
00274 
00277 #define ctl_imultiset_from_to_const(type,mlabel, ilabel, from, to, label )\
00278     ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator ) ppConcat(stack_,label);\
00279     const type* label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_begin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00280     for( ; label && (ilabel)->compare(label,(to)) < 0; label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_next)( &ppConcat(stack_,label) ) )
00281 
00284 #define ctl_imultiset_from_to_reverse(type,mlabel, ilabel, from, to, label )\
00285     ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator ) ppConcat(stack_,label);\
00286     type* label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_rbegin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00287     for( ; label && (ilabel)->compare(label,(to)) > 0; label = (type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_prev)( &ppConcat(stack_,label) ) )
00288 
00291 #define ctl_imultiset_from_to_reverse_const(type,mlabel, ilabel, from, to, label )\
00292     ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator ) ppConcat(stack_,label);\
00293     const type* label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_rbegin_from)( &ppConcat(stack_,label), (ilabel), (from) );\
00294     for( ; label && (ilabel)->compare(label,(to)) > 0; label = (const type*)ctl_tree_(ctlt_relative(offsetof(type,mlabel)),ctlt_multiple, iterator_prev)( &ppConcat(stack_,label) ) )
00295 
00296 #endif /* CTL_IMULTISET_H */
00297 
00298 

Generated on Fri Jan 2 15:28:34 2009 for Squat by  doxygen 1.5.6