qemu-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]