qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Re: [PATCH 04/29] Introduce QDict


From: Luiz Capitulino
Subject: [Qemu-devel] Re: [PATCH 04/29] Introduce QDict
Date: Thu, 20 Aug 2009 10:57:56 -0300

On Thu, 20 Aug 2009 10:57:54 +0300
Avi Kivity <address@hidden> wrote:

> On 08/20/2009 02:07 AM, Luiz Capitulino wrote:
> > QDict is a high-level dictionary data type that can be used to store a
> > collection of QObjects. A unique key is associated with only one
> > QObject.
> >
> > The following functions are available:
> >
> > - qdict_new()    Create a new dictionary
> > - qdict_add()    Add a new 'key:object' pair
> >    
> 
> qdict_put() is both symmetrical with qdict_get(), and also conveys the 
> fact that you can replace an existing key/value.

 Would it be useful in the current Monitor code? If so, how?

> > +/**
> > + * qdict_add_qint(): Add a new QInt into the dictionary
> > + *
> > + * Add the pair 'key:qint' into qdict. Does nothing if 'key' already
> > + * exist.
> > + *
> > + * NOTE: this function 'steals' a reference to 'qi'
> > + */
> > +void qdict_add_qint(QDict *qdict, const char *key, QInt *qi)
> > +{
> > +    qdict_add(qdict, key, QOBJECT(qi));
> > +}
> >    
> 
> I think these wrappers are superfluous, they don't really add much value.

 They exist to avoid always typing QOBJECT(), but a better way
would be:

#define qdict_add_qtype(qdict, key, qtype) \
        qdict_add(qdict, key, QOBJECT(qtype))

 I'll do the change.

> > +/**
> > + * qdict_get_int(): Get an int value mapped by 'key'
> > + *
> > + * This function assumes that 'key' exists and it stores a
> > + * QInt object.
> > + */
> > +int qdict_get_int(const QDict *qdict, const char *key)
> > +{
> > +    QObject *obj = qdict_get_obj(qdict, key, QTYPE_QINT);
> > +    return qint_to_int(qobject_to_qint(obj));
> > +}
> >    
> 
> This assumption does not hold if the dict came from a user.

 Then the user has to know what he or she is doing. :)

 The problem with high-level functions that receive a QObject
but return a plain int is: what do you return if QObject is
not an QInt?

 With QString is possible to return NULL, as you are returning
a pointer. But with ints the only solution I found was to
not accept this.

 Note that there is no problem when you are converting
between high-level types, like QObject to Qint.





reply via email to

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