qom: Introduce object_class_get_list()
This function allows to obtain a singly-linked list of classes, which can be sorted by the caller. Signed-off-by: Andreas Färber <afaerber@suse.de> Cc: Anthony Liguori <anthony@codemonkey.ws> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
ac4510337d
commit
418ba9e5d6
|
@ -560,6 +560,17 @@ ObjectClass *object_class_by_name(const char *typename);
|
||||||
void object_class_foreach(void (*fn)(ObjectClass *klass, void *opaque),
|
void object_class_foreach(void (*fn)(ObjectClass *klass, void *opaque),
|
||||||
const char *implements_type, bool include_abstract,
|
const char *implements_type, bool include_abstract,
|
||||||
void *opaque);
|
void *opaque);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* object_class_get_list:
|
||||||
|
* @implements_type: The type to filter for, including its derivatives.
|
||||||
|
* @include_abstract: Whether to include abstract classes.
|
||||||
|
*
|
||||||
|
* Returns: A singly-linked list of the classes in reverse hashtable order.
|
||||||
|
*/
|
||||||
|
GSList *object_class_get_list(const char *implements_type,
|
||||||
|
bool include_abstract);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* object_ref:
|
* object_ref:
|
||||||
* @obj: the object
|
* @obj: the object
|
||||||
|
|
17
qom/object.c
17
qom/object.c
|
@ -584,6 +584,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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void object_class_get_list_tramp(ObjectClass *klass, void *opaque)
|
||||||
|
{
|
||||||
|
GSList **list = opaque;
|
||||||
|
|
||||||
|
*list = g_slist_prepend(*list, klass);
|
||||||
|
}
|
||||||
|
|
||||||
|
GSList *object_class_get_list(const char *implements_type,
|
||||||
|
bool include_abstract)
|
||||||
|
{
|
||||||
|
GSList *list = NULL;
|
||||||
|
|
||||||
|
object_class_foreach(object_class_get_list_tramp,
|
||||||
|
implements_type, include_abstract, &list);
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
void object_ref(Object *obj)
|
void object_ref(Object *obj)
|
||||||
{
|
{
|
||||||
obj->ref++;
|
obj->ref++;
|
||||||
|
|
Loading…
Reference in New Issue