00001 /* vim: set sw=8 ts=8 sts=8 expandtab: */ 00002 #ifndef CMAID_ITER_H 00003 #define CMAID_ITER_H 00004 00080 typedef struct Cmaid_Iter Cmaid_Iter; 00081 00086 typedef struct Cmaid_Container Cmaid_Container; 00087 00099 typedef void (*Cmaid_Iter_Start_Cb) (Cmaid_Iter *it); 00101 typedef void *(*Cmaid_Iter_Iter_Goto_Cb) (Cmaid_Iter *it, const Cmaid_Iter *to_it); 00103 typedef void *(*Cmaid_Iter_Index_Goto_Cb) (Cmaid_Iter *it, int index); 00105 typedef void *(*Cmaid_Iter_Current_Cb) (Cmaid_Iter *it); 00107 typedef void *(*Cmaid_Iter_Next_Cb) (Cmaid_Iter *it); 00109 typedef void *(*Cmaid_Iter_Previous_Cb) (Cmaid_Iter *it); 00111 typedef void (*Cmaid_Iter_Remove_Cb) (Cmaid_Iter *it); 00112 00114 typedef struct Cmaid_Iter_Interface Cmaid_Iter_Interface; 00115 00120 struct Cmaid_Iter_Interface 00121 { 00122 Cmaid_Iter_Start_Cb start; 00123 Cmaid_Iter_Iter_Goto_Cb iter_goto; 00124 Cmaid_Iter_Index_Goto_Cb index_goto; 00125 Cmaid_Iter_Current_Cb current; 00126 Cmaid_Iter_Next_Cb next; 00127 Cmaid_Iter_Previous_Cb previous; 00128 Cmaid_Iter_Remove_Cb remove; 00129 }; 00142 struct Cmaid_Iter 00143 { 00144 const Cmaid_Iter_Interface *interface; 00145 Cmaid_Iter *next; 00146 void *container; 00147 void *current; 00148 int index; 00149 int bucket; 00150 }; 00151 00152 CMAID_INLINE void cmaid_iter_start(Cmaid_Iter *it); 00153 CMAID_INLINE void *cmaid_iter_iter_goto(Cmaid_Iter *it, 00154 const Cmaid_Iter *to_it); 00155 CMAID_INLINE void *cmaid_iter_index_goto(Cmaid_Iter *it, 00156 int index); 00157 CMAID_INLINE int cmaid_iter_index_get(Cmaid_Iter *it); 00158 CMAID_INLINE Cmaid_Container *cmaid_iter_container_get(Cmaid_Iter *it); 00159 CMAID_INLINE void *cmaid_iter_current(Cmaid_Iter *it); 00160 CMAID_INLINE void *cmaid_iter_next(Cmaid_Iter *it); 00161 CMAID_INLINE void *cmaid_iter_previous(Cmaid_Iter *it); 00162 CMAID_INLINE void cmaid_iter_remove(Cmaid_Iter *it); 00163 00167 #include <cmaid_iter_funcdef.h> 00168 00169 #endif /* CMAID_ITER_H */
1.5.8