[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 02/25] qom: add object_child_foreach
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 02/25] qom: add object_child_foreach |
Date: |
Tue, 3 Apr 2012 13:15:30 +0200 |
A utility function that will be used to implement hierarchical realization.
Signed-off-by: Paolo Bonzini <address@hidden>
---
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;
--
1.7.9.3
- [Qemu-devel] [PATCH 00/25] qdev properties final installment: push, push!, Paolo Bonzini, 2012/04/03
- [Qemu-devel] [PATCH 04/25] qom: make Object a type, Paolo Bonzini, 2012/04/03
- [Qemu-devel] [PATCH 01/25] qom: add object_class_get_parent, Paolo Bonzini, 2012/04/03
- [Qemu-devel] [PATCH 02/25] qom: add object_child_foreach,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 03/25] qom: add class_base_init, Paolo Bonzini, 2012/04/03
- [Qemu-devel] [PATCH 05/25] qom: push type up to Object, Paolo Bonzini, 2012/04/03
- [Qemu-devel] [PATCH 06/25] qdev: fix -device foo,?, Paolo Bonzini, 2012/04/03
- [Qemu-devel] [PATCH 07/25] qdev: use object_property_print in info qtree, Paolo Bonzini, 2012/04/03