qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Luiz Capitulino <lcapitulino@redhat.com>
To: Avi Kivity <avi@redhat.com>
Cc: jan.kiszka@siemens.com, aliguori@us.ibm.com, dlaor@redhat.com,
	qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
Date: Wed, 29 Jul 2009 10:46:00 -0300	[thread overview]
Message-ID: <20090729104600.17deb355@doriath> (raw)
In-Reply-To: <4A701AA3.4060902@redhat.com>

On Wed, 29 Jul 2009 12:47:15 +0300
Avi Kivity <avi@redhat.com> wrote:

> On 07/29/2009 01:04 AM, Luiz Capitulino wrote:
> > +struct qemu_dict {
> > +    size_t size;
> > +    struct qemu_dict_entry *table[QEMU_DICT_HASH_SIZE];
> > +};
> >    
> 
> We don't need to prefix everything with qemu, I think QDict or even Dict 
> is sufficient.  Ditto for the function names.  Also please provide a 
> typedef as is common qemu practice.

 Will change.

> > +struct qemu_dict *qemu_dict_create(void);
> > +void qemu_dict_add(struct qemu_dict *qdict, const char *key, void *value);
> > +void *qemu_dict_get(const struct qemu_dict *qdict, const char *key);
> > +int qemu_dict_exists(const struct qemu_dict *qdict, const char *key);
> > +void *qemu_dict_del(struct qemu_dict *qdict, const char *key);
> > +void qemu_dict_destroy(struct qemu_dict *qdict);
> > +void qemu_dict_walk(const struct qemu_dict *qdict,
> > +                    void (*walkf)(const char *key, void *value));
> > +
> >    
> 
> I'm worried about all those void *s as they move responsibility for type 
> safety and lifecycle management to the user.  I'd much rather see a 
> QObject (or Object) with the following methods:
> 
>    clone() - deep copy an object; dicts will store copies so we'll avoid 
> those leaks or a dictionary member modified after it was stored
>    destroy()
>    type() - return the type
>    as_dict(), as_string(), as_int() - convert to a subclass so its 
> methods can be used
> 
> Consider an operation such as printing out the dictionary, you have to 
> know the types of the values.

 I was thinking in doing a little bit different.

 My next patchset (phase 2) will introduce the QType (or QObject)
data type, as you have suggested in the QMP thread. This one will
have all those methods to convert from int, string, dict etc.

 Then the dictionary can store it and the user can provide
a iterator to print the objects.

 So, the point here is where to have the high-level data type
conversion: in the dict itself or in a higher layer (QObject).

 I slightly prefer to have them in the QObject, this way the
dict is more flexible and simpler, capable of storing anything.

 But I don't known where the clone() method should be, maybe in
both?

PS: I've called the iterator walk(), weird.

  parent reply	other threads:[~2009-07-29 13:46 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 01/25] Introduce QEMU dictionary data type Luiz Capitulino
2009-07-28 22:39   ` malc
2009-07-29 13:28     ` Luiz Capitulino
2009-07-29 13:38       ` malc
2009-07-29 13:38       ` Avi Kivity
2009-07-29 15:23         ` [Qemu-devel] " Paolo Bonzini
2009-07-29 15:24         ` Paolo Bonzini
2009-07-29  9:47   ` Avi Kivity
2009-07-29  9:49     ` Avi Kivity
2009-07-29 10:42       ` François Revol
2009-07-29 13:28     ` Anthony Liguori
2009-07-29 14:05       ` Avi Kivity
2009-07-29 13:46     ` Luiz Capitulino [this message]
2009-07-29 13:57       ` Avi Kivity
2009-07-29 14:22         ` Luiz Capitulino
2009-07-29 14:37           ` Avi Kivity
2009-07-29 16:11             ` Luiz Capitulino
2009-07-29 16:19               ` Avi Kivity
2009-07-30 14:50                 ` Luiz Capitulino
2009-07-30 15:03                   ` Avi Kivity
2009-07-30 15:05                     ` Luiz Capitulino
2009-07-30 15:04                   ` Filip Navara
2009-07-30 15:13                     ` Avi Kivity
2009-07-30 15:15                       ` Filip Navara
2009-07-30 15:19                       ` Paul Brook
2009-07-28 22:04 ` [Qemu-devel] [PATCH 02/25] net: Fix do_set_link() return type Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 03/25] Add wrappers to functions used by the Monitor Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 04/25] monitor: Document missing supported argument types Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 05/25] monitor: New format for handlers " Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 06/25] monitor: Setup a dictionary with handler arguments Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 07/25] monitor: Export qemu-dict.h header Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 08/25] monitor: New GET_TLONG and GET_TPHYSADDR macros Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 09/25] monitor: Port handler_0 to use the dictionary Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 10/25] monitor: Port handler_1 " Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 11/25] monitor: Port handler_2 " Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 12/25] monitor: Port handler_3 " Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 13/25] monitor: Port handler_4 " Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 14/25] monitor: Port handler_5 " Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 15/25] monitor: Port handler_6 " Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 16/25] monitor: Port handler_7 " Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 17/25] monitor: Drop handler_8 and handler_9 handling Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 18/25] monitor: Port handler_10 to use the dictionary Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 19/25] monitor: Split monitor_handle_command() Luiz Capitulino
2009-07-29 15:31   ` [Qemu-devel] " Paolo Bonzini
2009-07-29 15:44     ` Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 20/25] monitor: Add a new index for str_allocated[] Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 21/25] monitor: Drop args[] from monitor_parse_command() Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 22/25] monitor: Drop 'nb_args' " Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 23/25] Add check support Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 24/25] Introduce dictionary test data file Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 25/25] Introduce qemu-dict unit-tests Luiz Capitulino

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=20090729104600.17deb355@doriath \
    --to=lcapitulino@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=avi@redhat.com \
    --cc=dlaor@redhat.com \
    --cc=jan.kiszka@siemens.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).