[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2] qom: Introduce object_class_get_list()
From: |
Andreas Färber |
Subject: |
Re: [Qemu-devel] [PATCH v2] qom: Introduce object_class_get_list() |
Date: |
Sat, 25 Feb 2012 23:10:59 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20120208 Thunderbird/10.0.1 |
Am 25.02.2012 23:07, schrieb Andreas Färber:
> This function allows to obtain a singly-linked list of classes, which
> can be sorted by the caller.
>
> Signed-off-by: Andreas Färber <address@hidden>
> Cc: Anthony Liguori <address@hidden>
> ---
> v1 -> v2:
> * Instead of object_class_foreach() using a GCompareFunc with a GTree
> internally,
Err, should've been object_class_foreach_ordered();
object_class_foreach() does continue to exist. ;)
Andreas
> return a GSList so that the caller can sort herself (suggested by Anthony).
> * Add documentation.
>
> include/qemu/object.h | 11 +++++++++++
> qom/object.c | 17 +++++++++++++++++
> 2 files changed, 28 insertions(+), 0 deletions(-)
>
> diff --git a/include/qemu/object.h b/include/qemu/object.h
> index 69e4b7b..ddc3b81 100644
> --- a/include/qemu/object.h
> +++ b/include/qemu/object.h
> @@ -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
> diff --git a/qom/object.c b/qom/object.c
> index aa037d2..eef0b22 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -572,6 +572,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++;
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg