On 09/16/2016 06:06 PM, Frediano Ziglio wrote:
Noting that coding by hand these loop introduced some regression
I'm trying to introduce back from macros.
Before trying something harder to make possible to bind the type of
the content I'm trying some simple macro as were before.
I added the type to avoid some blindly void* casts.
Also the GListIter is introduced to avoid the possibility to exchange
easily some parameters.

Signed-off-by: Frediano Ziglio <fzig...@redhat.com>
---
 server/red-common.h   | 18 ++++++++++++++
 server/reds-private.h |  3 +++
 server/reds.c         | 66 +++++++++++++++++++++++++--------------------------
 3 files changed, 53 insertions(+), 34 deletions(-)

diff --git a/server/red-common.h b/server/red-common.h
index 7ab7e15..190fd9c 100644
--- a/server/red-common.h
+++ b/server/red-common.h
@@ -62,4 +62,22 @@ extern const SpiceCoreInterfaceInternal event_loop_core;

 typedef struct RedsState RedsState;

+typedef struct GListIter {
+    GList *link;
+    GList *next;
+} GListIter;
+
+#define GLIST_FOREACH_GENERIC(_list, _iter, _type, _data, _dir) \
+    for (_iter.link = _list; \
+        (_data = (_type *) (_iter.link ? _iter.link->data : NULL), \
+         _iter.next = (_iter.link ? _iter.link->_dir : NULL), \
+         _iter.link) != NULL; \
+         _iter.link = _iter.next)
+
+#define GLIST_FOREACH(_list, _iter, _type, _data) \
+    GLIST_FOREACH_GENERIC(_list, _iter, _type, _data, next)
+
+#define GLIST_FOREACH_REVERSED(_list, _iter, _type, _data) \
+    GLIST_FOREACH_GENERIC(_list, _iter, _type, _data, prev)
+
 #endif


Hi Frediano,

Looks good.

GLIST_FOREACH_REVERSED is not used.

In the future it would be nice to set _type
according to typeof _data, or compare _type with it.

Regards,
    Uri.


_______________________________________________
Spice-devel mailing list
Spice-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to