qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 02/25] qom: add object_child_foreach


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH 02/25] qom: add object_child_foreach
Date: Tue, 03 Apr 2012 15:51:02 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120310 Thunderbird/11.0

On 04/03/2012 06:15 AM, Paolo Bonzini wrote:
A utility function that will be used to implement hierarchical realization.

Signed-off-by: Paolo Bonzini<address@hidden>

Reviewed-by: Anthony Liguori <address@hidden>

Regards,

Anthony Liguori

---
  include/qemu/object.h |   14 +++++++++++++-
  qom/object.c          |   17 +++++++++++++++++
  2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/include/qemu/object.h b/include/qemu/object.h
index f814521..470efe3 100644
--- a/include/qemu/object.h
+++ b/include/qemu/object.h
@@ -918,6 +918,19 @@ void object_property_add_str(Object *obj, const char *name,
                               struct Error **errp);

  /**
+ * object_child_foreach:
+ * @obj: the object whose children will be navigated
+ * @fn: the iterator function to be called
+ * @opaque: an opaque value that will be passed to the iterator
+ *
+ * Call @fn passing each child of @obj and @opaque to it, until @fn returns
+ * non-zero.  Return the last value returned by @fn, or 0 if there is no
+ * child.
+ */
+int object_child_foreach(Object *obj, int (*fn)(Object *child, void *opaque),
+                         void *opaque);
+
+/**
   * container_get:
   * @path: path to the container
   *
@@ -928,5 +941,4 @@ void object_property_add_str(Object *obj, const char *name,
   */
  Object *container_get(const char *path);

-
  #endif
diff --git a/qom/object.c b/qom/object.c
index 3e9fed7..4975d93 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -597,6 +597,23 @@ void object_class_foreach(void (*fn)(ObjectClass *klass, 
void *opaque),
      g_hash_table_foreach(type_table_get(), object_class_foreach_tramp,&data);
  }

+int object_child_foreach(Object *obj, int (*fn)(Object *child, void *opaque),
+                         void *opaque)
+{
+    ObjectProperty *prop;
+    int ret = 0;
+
+    QTAILQ_FOREACH(prop,&obj->properties, node) {
+        if (strstart(prop->type, "child<", NULL)) {
+            ret = fn(prop->opaque, opaque);
+            if (ret != 0) {
+                break;
+            }
+        }
+    }
+    return ret;
+}
+
  static void object_class_get_list_tramp(ObjectClass *klass, void *opaque)
  {
      GSList **list = opaque;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]