mirror of https://github.com/xemu-project/xemu.git
qom: Add object_child_foreach()
A utility function that will be used to implement hierarchical realization. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Anthony Liguori <aliguori@us.ibm.com> [AF: Drop unrelated whitespace change, add Returns: in documentation] [AF: Use new object_property_is_child() helper.] Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
5d9d3f4757
commit
32efc535b8
|
@ -917,6 +917,20 @@ void object_property_add_str(Object *obj, const char *name,
|
||||||
void (*set)(Object *, const char *, struct Error **),
|
void (*set)(Object *, const char *, struct Error **),
|
||||||
struct Error **errp);
|
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.
|
||||||
|
*
|
||||||
|
* Returns: 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:
|
* container_get:
|
||||||
* @root: root of the #path, e.g., object_get_root()
|
* @root: root of the #path, e.g., object_get_root()
|
||||||
|
|
17
qom/object.c
17
qom/object.c
|
@ -607,6 +607,23 @@ void object_class_foreach(void (*fn)(ObjectClass *klass, void *opaque),
|
||||||
g_hash_table_foreach(type_table_get(), object_class_foreach_tramp, &data);
|
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 (object_property_is_child(prop)) {
|
||||||
|
ret = fn(prop->opaque, opaque);
|
||||||
|
if (ret != 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void object_class_get_list_tramp(ObjectClass *klass, void *opaque)
|
static void object_class_get_list_tramp(ObjectClass *klass, void *opaque)
|
||||||
{
|
{
|
||||||
GSList **list = opaque;
|
GSList **list = opaque;
|
||||||
|
|
Loading…
Reference in New Issue