From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:43487) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S7vaz-0007ud-FQ for qemu-devel@nongnu.org; Wed, 14 Mar 2012 17:18:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1S7vax-0000Eg-DF for qemu-devel@nongnu.org; Wed, 14 Mar 2012 17:18:57 -0400 Received: from mail-yx0-f173.google.com ([209.85.213.173]:61709) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S7vax-0000EU-9X for qemu-devel@nongnu.org; Wed, 14 Mar 2012 17:18:55 -0400 Received: by yenr5 with SMTP id r5so2643900yen.4 for ; Wed, 14 Mar 2012 14:18:53 -0700 (PDT) Message-ID: <4F610B39.4010504@codemonkey.ws> Date: Wed, 14 Mar 2012 16:18:49 -0500 From: Anthony Liguori MIME-Version: 1.0 References: <1330207654-25841-1-git-send-email-afaerber@suse.de> In-Reply-To: <1330207654-25841-1-git-send-email-afaerber@suse.de> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH v2] qom: Introduce object_class_get_list() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?UTF-8?B?QW5kcmVhcyBGw6RyYmVy?= Cc: qemu-devel@nongnu.org On 02/25/2012 04:07 PM, Andreas Färber wrote: > This function allows to obtain a singly-linked list of classes, which > can be sorted by the caller. > > Signed-off-by: Andreas Färber > Cc: Anthony Liguori Applied. Thanks. Regards, Anthony Liguori > --- > v1 -> v2: > * Instead of object_class_foreach() using a GCompareFunc with a GTree internally, > 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++;