--- a/symlist.h Wed Feb 23 19:05:01 2005 +0100 +++ b/symlist.h Thu Feb 24 09:12:21 2005 +0100 @@ -23,16 +23,39 @@ }; -#define ITERATE_SYMLIST(TYPE, VAR, LIST) \ - for((VAR)=(TYPE)symlist_init_iter(LIST); \ - (VAR)!=NULL; \ - (VAR)=(TYPE)symlist_iter()) +typedef Symlist* SymlistIterTmp; + +#define SYMLIST_FIRST(TYPE, LL) ((LL)==NULL ? NULL : (TYPE)(LL)->symbol) +#define SYMLIST_LAST(TYPE, LL) ((LL)==NULL ? NULL : (TYPE)(LL)->prev->symbol) +#define FOR_ALL_ON_SYMLIST(TYPE, VAR, LL, TMP) \ + for(symlist_iter_init(&(TMP), LL), \ + VAR=(TYPE)symlist_iter(&(TMP)); \ + VAR!=NULL; \ + VAR=(TYPE)symlist_iter(&(TMP))) + +#define FOR_ALL_ON_SYMLIST_REV(TYPE, VAR, LL, TMP) \ + for(symlist_iter_rev_init(&(TMP), LL), \ + VAR=(TYPE)symlist_iter_rev(&(TMP)); \ + VAR!=NULL; \ + VAR=(TYPE)symlist_iter_rev(&(TMP))) -bool symlist_insert(Symlist **symlist, void *symbol); -void symlist_remove(Symlist **symlist, void *symbol); -void symlist_clear(Symlist **symlist); -void *symlist_init_iter(Symlist *symlist); -void *symlist_iter(); +#define FOR_ALL_ON_SYMLIST_UNSAFE(TYPE, VAR, LL) \ + FOR_ALL_ON_SYMLIST(TYPE, VAR, LL, symlist_iter_tmp) + +extern SymlistIterTmp symlist_iter_tmp; + +#define SYMLIST_EMPTY(LIST) ((LIST)==NULL) + +extern bool symlist_insert_last(Symlist **symlist, void *symbol); +extern bool symlist_insert_first(Symlist **symlist, void *symbol); +extern bool symlist_reinsert_last(Symlist **symlist, void *symbol); +extern bool symlist_reinsert_first(Symlist **symlist, void *symbol); +extern void symlist_remove(Symlist **symlist, void *symbol); +extern void symlist_clear(Symlist **symlist); +extern void symlist_iter_init(SymlistIterTmp *state, Symlist *symlist); +extern void *symlist_iter(SymlistIterTmp *state); +extern void symlist_iter_rev_init(SymlistIterTmp *state, Symlist *symlist); +extern void *symlist_iter_rev(SymlistIterTmp *state); #endif /* LIBTU_SYMLIST_H */