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),
|
||||
const char *implements_type, bool include_abstract,
|
||||
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:
|
||||
* @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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
obj->ref++;
|
||||
|
Loading…
Reference in New Issue
Block a user