QList: Introduce QLIST_FOREACH_ENTRY()
authorLuiz Capitulino <lcapitulino@redhat.com>
Thu, 21 Jan 2010 21:15:38 +0000 (19:15 -0200)
committerAnthony Liguori <aliguori@us.ibm.com>
Tue, 26 Jan 2010 21:42:01 +0000 (15:42 -0600)
Iterate over QList entries, it's needed to call qlist_entry_obj()
to retrieve the stored QObject.

I'm not sure if it's ok to have this, because it's not as easy as
qlist_iter() and the QListEntry data type is now exposed to the
users, which means we have one more struct to be maintained when
we have libqmp.

Adding anyway, as it's more compact and people are asking for it.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
qlist.h

diff --git a/qlist.h b/qlist.h
index afdc4465bfd362eea135eeda0f0cb1ee4c64b0b1..a3261e1781cb9a599fcb0dce96c329111f27e610 100644 (file)
--- a/qlist.h
+++ b/qlist.h
@@ -29,6 +29,16 @@ typedef struct QList {
 #define qlist_append(qlist, obj) \
         qlist_append_obj(qlist, QOBJECT(obj))
 
+#define QLIST_FOREACH_ENTRY(qlist, var)             \
+        for ((var) = ((qlist)->head.tqh_first);     \
+            (var);                                  \
+            (var) = ((var)->next.tqe_next))
+
+static inline QObject *qlist_entry_obj(const QListEntry *entry)
+{
+    return entry->value;
+}
+
 QList *qlist_new(void);
 QList *qlist_copy(QList *src);
 void qlist_append_obj(QList *qlist, QObject *obj);