symlist.h

changeset 88
308dfa54da3e
parent 62
aae5facf9fc5
--- 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 */

mercurial