+EINA_INLIST_FOREACH_SAFE
authordiscomfitor <discomfitor@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 16 Feb 2011 09:34:27 +0000 (09:34 +0000)
committerdiscomfitor <discomfitor@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 16 Feb 2011 09:34:27 +0000 (09:34 +0000)
it looks crazy, but it works somehow

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/eina@57080 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

ChangeLog
src/include/eina_inlist.h

index d194bb7..eca111f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -10,3 +10,6 @@
 
        * Added eina_unicode_strndup
 
+2011-02-16  Mike Blumenkrantz
+
+        * EINA_INLIST_FOREACH_SAFE
index 03b1665..0add2b9 100644 (file)
@@ -98,6 +98,10 @@ EAPI Eina_Accessor *eina_inlist_accessor_new(const Eina_Inlist *in_list) EINA_MA
 #define EINA_INLIST_FOREACH(list, l)                                     \
   for (l = NULL, l = (list ? _EINA_INLIST_CONTAINER(l, list) : NULL); l; \
        l = (EINA_INLIST_GET(l)->next ? _EINA_INLIST_CONTAINER(l, EINA_INLIST_GET(l)->next) : NULL))
+#define EINA_INLIST_FOREACH_SAFE(list, list2, l) \
+   for (l = (list ? _EINA_INLIST_CONTAINER(l, list) : NULL), list2 = l ? ((EINA_INLIST_GET(l) ? EINA_INLIST_GET(l)->next : NULL)) : NULL; \
+        l; \
+        l = _EINA_INLIST_CONTAINER(l, list2), list2 = list2 ? list2->next : NULL)
 #define EINA_INLIST_REVERSE_FOREACH(list, l)                                \
   for (l = NULL, l = (list ? _EINA_INLIST_CONTAINER(l, list->last) : NULL); \
        l; l = (EINA_INLIST_GET(l)->prev ? _EINA_INLIST_CONTAINER(l, EINA_INLIST_GET(l)->prev) : NULL))