From: Michael Roth <mdroth@linux.vnet.ibm.com>
To: Luiz Capitulino <lcapitulino@redhat.com>
Cc: aliguori@linux.vnet.ibm.com, agl@linux.vnet.ibm.com,
qemu-devel@nongnu.org, Jes.Sorensen@redhat.com
Subject: Re: [Qemu-devel] [PATCH v5 04/18] qapi: add QAPI visitor core
Date: Thu, 07 Jul 2011 09:40:12 -0500 [thread overview]
Message-ID: <4E15C54C.2080100@linux.vnet.ibm.com> (raw)
In-Reply-To: <20110707113202.7373a49c@doriath>
On 07/07/2011 09:32 AM, Luiz Capitulino wrote:
> On Tue, 5 Jul 2011 08:02:31 -0500
> Michael Roth<mdroth@linux.vnet.ibm.com> wrote:
>
>> Base definitions/includes for Visiter interface used by generated
>> visiter/marshalling code.
>>
>> Includes a GenericList type. Our lists require an embedded element.
>> Since these types are generated, if you want to use them in a different
>> type of data structure, there's no easy way to add another embedded
>> element. The solution is to have non-embedded lists and that what this is.
>>
>> Signed-off-by: Michael Roth<mdroth@linux.vnet.ibm.com>
>> ---
>> Makefile.objs | 6 +++
>> configure | 1 +
>> qapi/qapi-types-core.h | 21 +++++++++
>> qapi/qapi-visit-core.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++++
>> qapi/qapi-visit-core.h | 68 ++++++++++++++++++++++++++++
>> 5 files changed, 210 insertions(+), 0 deletions(-)
>> create mode 100644 qapi/qapi-types-core.h
>> create mode 100644 qapi/qapi-visit-core.c
>> create mode 100644 qapi/qapi-visit-core.h
>>
>> diff --git a/Makefile.objs b/Makefile.objs
>> index 493c988..0077014 100644
>> --- a/Makefile.objs
>> +++ b/Makefile.objs
>> @@ -372,6 +372,12 @@ endif
>>
>> libcacard-y = cac.o event.o vcard.o vreader.o vcard_emul_nss.o vcard_emul_type.o card_7816.o
>>
>> +######################################################################
>> +# qapi
>> +
>> +qapi-nested-y = qapi-visit-core.o
>> +qapi-obj-y = $(addprefix qapi/, $(qapi-nested-y))
>
> qapi-obj-y has to included in common-obj-y, no? I'd also move this up in this
> file (where others "modulename-obj-y" are located).
>
Eventually, when we do the full QMP conversion. But for now, only the
guest agent pulls these in. I'll move the block up.
>> +
>> vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)
>>
>> vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS)
>> diff --git a/configure b/configure
>> index 63156a2..02c552e 100755
>> --- a/configure
>> +++ b/configure
>> @@ -3486,6 +3486,7 @@ DIRS="tests tests/cris slirp audio block net pc-bios/optionrom"
>> DIRS="$DIRS pc-bios/spapr-rtas"
>> DIRS="$DIRS roms/seabios roms/vgabios"
>> DIRS="$DIRS fsdev ui"
>> +DIRS="$DIRS qapi"
>> FILES="Makefile tests/Makefile"
>> FILES="$FILES tests/cris/Makefile tests/cris/.gdbinit"
>> FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
>> diff --git a/qapi/qapi-types-core.h b/qapi/qapi-types-core.h
>> new file mode 100644
>> index 0000000..de733ab
>> --- /dev/null
>> +++ b/qapi/qapi-types-core.h
>> @@ -0,0 +1,21 @@
>> +/*
>> + * Core Definitions for QAPI-generated Types
>> + *
>> + * Copyright IBM, Corp. 2011
>> + *
>> + * Authors:
>> + * Anthony Liguori<aliguori@us.ibm.com>
>> + *
>> + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
>> + * See the COPYING.LIB file in the top-level directory.
>> + *
>> + */
>> +
>> +#ifndef QAPI_TYPES_CORE_H
>> +#define QAPI_TYPES_CORE_H
>> +
>> +#include<stdbool.h>
>> +#include<stdint.h>
>> +#include "error.h"
>> +
>> +#endif
>> diff --git a/qapi/qapi-visit-core.c b/qapi/qapi-visit-core.c
>> new file mode 100644
>> index 0000000..c8a7805
>> --- /dev/null
>> +++ b/qapi/qapi-visit-core.c
>> @@ -0,0 +1,114 @@
>> +/*
>> + * Core Definitions for QAPI Visitor Classes
>> + *
>> + * Copyright IBM, Corp. 2011
>> + *
>> + * Authors:
>> + * Anthony Liguori<aliguori@us.ibm.com>
>> + *
>> + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
>> + * See the COPYING.LIB file in the top-level directory.
>> + *
>> + */
>> +
>> +#include "qapi/qapi-visit-core.h"
>> +
>> +void visit_start_handle(Visitor *v, void **obj, const char *kind, const char *name, Error **errp)
>> +{
>> + if (!error_is_set(errp)&& v->start_handle) {
>> + v->start_handle(v, obj, kind, name, errp);
>> + }
>> +}
>> +
>> +void visit_end_handle(Visitor *v, Error **errp)
>> +{
>> + if (!error_is_set(errp)&& v->end_handle) {
>> + v->end_handle(v, errp);
>> + }
>> +}
>> +
>> +void visit_start_struct(Visitor *v, void **obj, const char *kind, const char *name, size_t size, Error **errp)
>> +{
>> + if (!error_is_set(errp)) {
>> + v->start_struct(v, obj, kind, name, size, errp);
>> + }
>> +}
>> +
>> +void visit_end_struct(Visitor *v, Error **errp)
>> +{
>> + if (!error_is_set(errp)) {
>> + v->end_struct(v, errp);
>> + }
>> +}
>> +
>> +void visit_start_list(Visitor *v, const char *name, Error **errp)
>> +{
>> + if (!error_is_set(errp)) {
>> + v->start_list(v, name, errp);
>> + }
>> +}
>> +
>> +GenericList *visit_next_list(Visitor *v, GenericList **list, Error **errp)
>> +{
>> + if (!error_is_set(errp)) {
>> + return v->next_list(v, list, errp);
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +void visit_end_list(Visitor *v, Error **errp)
>> +{
>> + if (!error_is_set(errp)) {
>> + v->end_list(v, errp);
>> + }
>> +}
>> +
>> +void visit_start_optional(Visitor *v, bool *present, const char *name, Error **errp)
>> +{
>> + if (!error_is_set(errp)&& v->start_optional) {
>> + v->start_optional(v, present, name, errp);
>> + }
>> +}
>> +
>> +void visit_end_optional(Visitor *v, Error **errp)
>> +{
>> + if (!error_is_set(errp)&& v->end_optional) {
>> + v->end_optional(v, errp);
>> + }
>> +}
>> +
>> +void visit_type_enum(Visitor *v, int *obj, const char *kind, const char *name, Error **errp)
>> +{
>> + if (!error_is_set(errp)) {
>> + v->type_enum(v, obj, kind, name, errp);
>> + }
>> +}
>> +
>> +void visit_type_int(Visitor *v, int64_t *obj, const char *name, Error **errp)
>> +{
>> + if (!error_is_set(errp)) {
>> + v->type_int(v, obj, name, errp);
>> + }
>> +}
>> +
>> +void visit_type_bool(Visitor *v, bool *obj, const char *name, Error **errp)
>> +{
>> + if (!error_is_set(errp)) {
>> + v->type_bool(v, obj, name, errp);
>> + }
>> +}
>> +
>> +void visit_type_str(Visitor *v, char **obj, const char *name, Error **errp)
>> +{
>> + if (!error_is_set(errp)) {
>> + v->type_str(v, obj, name, errp);
>> + }
>> +}
>> +
>> +void visit_type_number(Visitor *v, double *obj, const char *name, Error **errp)
>> +{
>> + if (!error_is_set(errp)) {
>> + v->type_number(v, obj, name, errp);
>> + }
>> +}
>> diff --git a/qapi/qapi-visit-core.h b/qapi/qapi-visit-core.h
>> new file mode 100644
>> index 0000000..8350a6d
>> --- /dev/null
>> +++ b/qapi/qapi-visit-core.h
>> @@ -0,0 +1,68 @@
>> +/*
>> + * Core Definitions for QAPI Visitor Classes
>> + *
>> + * Copyright IBM, Corp. 2011
>> + *
>> + * Authors:
>> + * Anthony Liguori<aliguori@us.ibm.com>
>> + *
>> + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
>> + * See the COPYING.LIB file in the top-level directory.
>> + *
>> + */
>> +#ifndef QAPI_VISITOR_CORE_H
>> +#define QAPI_VISITOR_CORE_H
>> +
>> +#include "qapi/qapi-types-core.h"
>> +#include "error.h"
>> +#include<stdlib.h>
>> +
>> +typedef struct GenericList
>> +{
>> + void *value;
>> + struct GenericList *next;
>> +} GenericList;
>> +
>> +typedef struct Visitor Visitor;
>> +
>> +struct Visitor
>> +{
>> + /* Must be set */
>> + void (*start_struct)(Visitor *v, void **obj, const char *kind, const char *name, size_t size, Error **errp);
>> + void (*end_struct)(Visitor *v, Error **errp);
>> +
>> + void (*start_list)(Visitor *v, const char *name, Error **errp);
>> + GenericList *(*next_list)(Visitor *v, GenericList **list, Error **errp);
>> + void (*end_list)(Visitor *v, Error **errp);
>> +
>> + void (*type_enum)(Visitor *v, int *obj, const char *kind, const char *name, Error **errp);
>> +
>> + void (*type_int)(Visitor *v, int64_t *obj, const char *name, Error **errp);
>> + void (*type_bool)(Visitor *v, bool *obj, const char *name, Error **errp);
>> + void (*type_str)(Visitor *v, char **obj, const char *name, Error **errp);
>> + void (*type_number)(Visitor *v, double *obj, const char *name, Error **errp);
>> +
>> + /* May be NULL */
>> + void (*start_optional)(Visitor *v, bool *present, const char *name, Error **errp);
>> + void (*end_optional)(Visitor *v, Error **errp);
>> +
>> + void (*start_handle)(Visitor *v, void **obj, const char *kind, const char *name, Error **errp);
>> + void (*end_handle)(Visitor *v, Error **errp);
>> +};
>> +
>> +void visit_start_handle(Visitor *v, void **obj, const char *kind, const char *name, Error **errp);
>> +void visit_end_handle(Visitor *v, Error **errp);
>> +void visit_start_struct(Visitor *v, void **obj, const char *kind, const char *name, size_t size, Error **errp);
>> +void visit_end_struct(Visitor *v, Error **errp);
>> +void visit_start_list(Visitor *v, const char *name, Error **errp);
>> +GenericList *visit_next_list(Visitor *v, GenericList **list, Error **errp);
>> +void visit_end_list(Visitor *v, Error **errp);
>> +void visit_start_optional(Visitor *v, bool *present, const char *name, Error **errp);
>> +void visit_end_optional(Visitor *v, Error **errp);
>> +void visit_type_enum(Visitor *v, int *obj, const char *kind, const char *name, Error **errp);
>> +void visit_type_int(Visitor *v, int64_t *obj, const char *name, Error **errp);
>> +void visit_type_bool(Visitor *v, bool *obj, const char *name, Error **errp);
>> +void visit_type_str(Visitor *v, char **obj, const char *name, Error **errp);
>> +void visit_type_number(Visitor *v, double *obj, const char *name, Error **errp);
>> +
>> +#endif
>
next prev parent reply other threads:[~2011-07-07 14:40 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-05 13:02 [Qemu-devel] [QAPI+QGA 2/3] QAPI code generation infrastructure v5 Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 01/18] Add hard build dependency on glib Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 02/18] qlist: add qlist_first()/qlist_next() Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 03/18] qapi: add module init types for qapi Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 04/18] qapi: add QAPI visitor core Michael Roth
2011-07-07 14:32 ` Luiz Capitulino
2011-07-07 14:40 ` Michael Roth [this message]
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 05/18] qapi: add QMP input visitor Michael Roth
2011-07-07 14:32 ` Luiz Capitulino
2011-07-07 14:45 ` Michael Roth
2011-07-12 0:05 ` Michael Roth
2011-07-12 13:16 ` Luiz Capitulino
2011-07-12 13:46 ` Michael Roth
2011-07-12 13:53 ` Luiz Capitulino
2011-07-12 14:14 ` Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 06/18] qapi: add QMP output visitor Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 07/18] qapi: add QAPI dealloc visitor Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 08/18] qapi: add QMP command registration/lookup functions Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 09/18] qapi: add QMP dispatch functions Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 10/18] qapi: add ordereddict.py helper library Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 11/18] qapi: add qapi.py helper libraries Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 12/18] qapi: add qapi-types.py code generator Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 13/18] qapi: add qapi-visit.py " Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 14/18] qapi: add qapi-commands.py " Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 15/18] qapi: test schema used for unit tests Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 16/18] qapi: add test-visitor, tests for gen. visitor code Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 17/18] qapi: add test-qmp-commands, tests for gen. marshalling/dispatch code Michael Roth
2011-07-05 13:02 ` [Qemu-devel] [PATCH v5 18/18] qapi: add QAPI code generation documentation Michael Roth
2011-07-07 14:37 ` [Qemu-devel] [QAPI+QGA 2/3] QAPI code generation infrastructure v5 Luiz Capitulino
2011-07-07 15:02 ` Michael Roth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E15C54C.2080100@linux.vnet.ibm.com \
--to=mdroth@linux.vnet.ibm.com \
--cc=Jes.Sorensen@redhat.com \
--cc=agl@linux.vnet.ibm.com \
--cc=aliguori@linux.vnet.ibm.com \
--cc=lcapitulino@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.