From: Eduardo Habkost <ehabkost@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 02/14] qlit: move qlit from check-qjson to qobject/
Date: Fri, 1 Sep 2017 10:23:46 -0300 [thread overview]
Message-ID: <20170901132346.GI7570@localhost.localdomain> (raw)
In-Reply-To: <87shg6dc1k.fsf@dusky.pond.sub.org>
On Fri, Sep 01, 2017 at 11:05:11AM +0200, Markus Armbruster wrote:
> Eduardo Habkost <ehabkost@redhat.com> writes:
>
> > On Thu, Aug 24, 2017 at 12:33:38PM +0200, Marc-André Lureau wrote:
> >> Fix code style issues while at it, to please check-patch.
> >>
> >> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> >> ---
> >> include/qapi/qmp/qlit.h | 49 +++++++++++++++++++++++++
> >> qobject/qlit.c | 89 +++++++++++++++++++++++++++++++++++++++++++++
> >> tests/check-qjson.c | 96 +------------------------------------------------
> >> qobject/Makefile.objs | 2 +-
> >> 4 files changed, 140 insertions(+), 96 deletions(-)
> >> create mode 100644 include/qapi/qmp/qlit.h
> >> create mode 100644 qobject/qlit.c
> >>
> >> diff --git a/include/qapi/qmp/qlit.h b/include/qapi/qmp/qlit.h
> >> new file mode 100644
> >> index 0000000000..4e2e760ef1
> >> --- /dev/null
> >> +++ b/include/qapi/qmp/qlit.h
> >> @@ -0,0 +1,49 @@
> >> +/*
> >> + * Copyright IBM, Corp. 2009
> >> + * Copyright (c) 2013, 2015, 2017 Red Hat Inc.
> >> + *
> >> + * Authors:
> >> + * Anthony Liguori <aliguori@us.ibm.com>
> >> + * Markus Armbruster <armbru@redhat.com>
> >> + * Marc-André Lureau <marcandre.lureau@redhat.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 QLIT_H_
> >> +#define QLIT_H_
> >> +
> >> +#include "qapi-types.h"
> >> +#include "qobject.h"
> >> +
> >> +typedef struct LiteralQDictEntry LiteralQDictEntry;
> >> +typedef struct LiteralQObject LiteralQObject;
> >> +
> >> +struct LiteralQObject {
> >> + int type;
> >> + union {
> >> + int64_t qnum;
> >> + const char *qstr;
> >> + LiteralQDictEntry *qdict;
> >> + LiteralQObject *qlist;
> >> + } value;
> >> +};
> >> +
> >> +struct LiteralQDictEntry {
> >> + const char *key;
> >> + LiteralQObject value;
> >> +};
> >> +
> >> +#define QLIT_QNUM(val) \
> >> + (LiteralQObject){.type = QTYPE_QNUM, .value.qnum = (val)}
> >> +#define QLIT_QSTR(val) \
> >> + (LiteralQObject){.type = QTYPE_QSTRING, .value.qstr = (val)}
> >> +#define QLIT_QDICT(val) \
> >> + (LiteralQObject){.type = QTYPE_QDICT, .value.qdict = (val)}
> >> +#define QLIT_QLIST(val) \
> >> + (LiteralQObject){.type = QTYPE_QLIST, .value.qlist = (val)}
> >
> > I'm still trying to understand why this exists. Doesn't this
> > provide exactly the same functionality as QObject?
>
> The value-add is initializers. Check out check-qjson.c for examples.
Oh, I see.
QList and QDict seem to be the ones that require special code for
literals. Making initializers for QNull, QNum, QString, and
QBool seems possible.
>
> Use cases:
>
> * Specify expected output as data (QLitObject initializer), then use
> qlit_equal_qobject() to verify actual output matches. Example:
> check-qjson.c. I think it compares nicely to the qdict_get morass we
> use elsewhere.
Is any qlit_equal_qobject() user so performance-critical that it
couldn't be replaced by a QObject/QObject comparison function,
and implemented as qobject_equals(qobject_from_qlit(a), b)?
>
> * Specify a QObject as data (QLitObject initializer), build it with
> qobject_from_qlit(). Example: PATCH 14. I think it beats specifying
> the QObject in code (qdict_new(), qdict_put(), ...) at least when the
> QObject is big.
--
Eduardo
next prev parent reply other threads:[~2017-09-01 13:24 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-24 10:33 [Qemu-devel] [PATCH 00/14] Generate a literal qobject for introspection Marc-André Lureau
2017-08-24 10:33 ` [Qemu-devel] [PATCH 01/14] qdict: add qdict_put_null() helper Marc-André Lureau
2017-08-25 5:52 ` Markus Armbruster
2017-08-25 12:53 ` Eduardo Habkost
2017-08-24 10:33 ` [Qemu-devel] [PATCH 02/14] qlit: move qlit from check-qjson to qobject/ Marc-André Lureau
2017-08-25 5:55 ` Markus Armbruster
2017-09-01 0:06 ` Eduardo Habkost
2017-09-01 9:05 ` Markus Armbruster
2017-09-01 13:23 ` Eduardo Habkost [this message]
2017-08-24 10:33 ` [Qemu-devel] [PATCH 03/14] qlit: use QLit prefix consistently Marc-André Lureau
2017-08-25 6:04 ` Markus Armbruster
2017-08-24 10:33 ` [Qemu-devel] [PATCH 04/14] qlit: remove needless type cast Marc-André Lureau
2017-08-25 6:20 ` Markus Armbruster
2017-08-25 10:17 ` Marc-André Lureau
2017-08-28 11:17 ` Markus Armbruster
2017-08-24 10:33 ` [Qemu-devel] [PATCH 05/14] qlit: rename compare_litqobj_to_qobj Marc-André Lureau
2017-08-25 6:35 ` Markus Armbruster
2017-08-25 6:44 ` Markus Armbruster
2017-08-24 10:33 ` [Qemu-devel] [PATCH 06/14] qlit: make qlit_equal_qobject return a bool Marc-André Lureau
2017-08-25 6:55 ` Markus Armbruster
2017-08-24 10:33 ` [Qemu-devel] [PATCH 07/14] qlit: make qlit_equal_qobject() take const arguments Marc-André Lureau
2017-08-25 6:56 ` Markus Armbruster
2017-08-24 10:33 ` [Qemu-devel] [PATCH 08/14] qlit: add QLIT_QNULL and QLIT_BOOL Marc-André Lureau
2017-08-25 6:57 ` Markus Armbruster
2017-08-24 10:33 ` [Qemu-devel] [PATCH 09/14] qlit: replace assert(qnum_get_try_int) Marc-André Lureau
2017-08-25 7:02 ` Markus Armbruster
2017-08-24 10:33 ` [Qemu-devel] [PATCH 10/14] tests: add qlit tests Marc-André Lureau
2017-08-24 10:33 ` [Qemu-devel] [PATCH 11/14] qlit: improve QLit dict vs qdict comparison Marc-André Lureau
2017-08-24 10:33 ` [Qemu-devel] [PATCH 12/14] qlit: improve QLit list vs qlist comparison Marc-André Lureau
2017-08-24 10:38 ` Marc-André Lureau
2017-08-24 10:33 ` [Qemu-devel] [PATCH 13/14] qlit: add qobject_form_qlit() Marc-André Lureau
2017-08-24 10:33 ` [Qemu-devel] [PATCH 14/14] qapi: generate a literal qobject for introspection Marc-André Lureau
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=20170901132346.GI7570@localhost.localdomain \
--to=ehabkost@redhat.com \
--cc=armbru@redhat.com \
--cc=marcandre.lureau@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.