aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/bfc/foreach.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/bfc/foreach.h')
-rw-r--r--Src/Wasabi/bfc/foreach.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/Src/Wasabi/bfc/foreach.h b/Src/Wasabi/bfc/foreach.h
new file mode 100644
index 00000000..1ba53801
--- /dev/null
+++ b/Src/Wasabi/bfc/foreach.h
@@ -0,0 +1,55 @@
+#ifndef _FOREACH_H
+#define _FOREACH_H
+
+#include "memblock.h"
+#include "ptrlist.h"
+
+
+// foreach stuff
+/* use like this:
+ PtrList<blah> list;
+ foreach(list)
+ list.getfor()->booga();
+ something(list.getfor());
+ endfor
+*/
+
+// foreach stuff
+class __foreach
+{
+public:
+ __foreach(const PtrListRoot &ptrlist, int reverse=FALSE);
+ __foreach(const PtrListRoot *ptrlist, int reverse=FALSE);
+
+ int done() const;
+ void *next(int advance = TRUE);
+ void *getPtr() const;
+
+ int getPos() const;
+
+private:
+ MemBlock<void *> list;
+ int pos;
+};
+
+#define foreach(x) \
+{ \
+ void *__fe_void; \
+ __foreach ___f(x); \
+ for (__fe_void = ___f.getPtr(); !___f.done(); __fe_void = ___f.next()) {
+#define getfor() castFor(__fe_void)
+#define endfor \
+ } \
+}
+#define foreach_reverse(x) \
+{ \
+ void *__fe_void; \
+ __foreach ___f(x, TRUE); \
+ for (__fe_void = ___f.getPtr(); !___f.done(); __fe_void = ___f.next()) {
+#define getfor() castFor(__fe_void)
+#define endfor \
+ } \
+}
+#define foreach_index (___f.getPos())
+
+#endif