00001 #ifndef STR_ITER__H__ 00002 #define STR_ITER__H__ 00003 00004 struct str; 00005 00015 typedef struct 00016 { 00018 const struct str* str; 00020 unsigned start; 00022 const char* startptr; 00024 unsigned len; 00026 char sep; 00027 } striter; 00028 00029 void striter_start(striter* iter, const struct str* s, char sep); 00030 int striter_valid(striter*); 00031 int striter_advance(striter*); 00032 00034 #define str_copyiter(STR,ITER) str_copyb(STR,(ITER)->startptr,(ITER)->len) 00035 00037 #define str_catiter(STR,ITER) str_catb(STR,(ITER)->startptr,(ITER)->len) 00038 00040 #define obuf_putiter(OBUF,ITER) obuf_write(OBUF,(ITER)->startptr,(ITER)->len) 00041 00043 #define striter_loop(ITER,STR,SEP) for(striter_start(ITER,STR,SEP);striter_valid(ITER);striter_advance(ITER)) 00044 00047 #endif