From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MW9a6-0005Fr-66 for qemu-devel@nongnu.org; Wed, 29 Jul 2009 09:52:34 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MW9a1-0005D1-K3 for qemu-devel@nongnu.org; Wed, 29 Jul 2009 09:52:33 -0400 Received: from [199.232.76.173] (port=59772 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MW9a1-0005Cp-FS for qemu-devel@nongnu.org; Wed, 29 Jul 2009 09:52:29 -0400 Received: from mx2.redhat.com ([66.187.237.31]:53254) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MW9a0-0004FH-Ly for qemu-devel@nongnu.org; Wed, 29 Jul 2009 09:52:29 -0400 Message-ID: <4A705536.3020305@redhat.com> Date: Wed, 29 Jul 2009 16:57:10 +0300 From: Avi Kivity MIME-Version: 1.0 References: <1248818713-11261-1-git-send-email-lcapitulino@redhat.com> <1248818713-11261-2-git-send-email-lcapitulino@redhat.com> <4A701AA3.4060902@redhat.com> <20090729104600.17deb355@doriath> In-Reply-To: <20090729104600.17deb355@doriath> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Luiz Capitulino Cc: jan.kiszka@siemens.com, aliguori@us.ibm.com, dlaor@redhat.com, qemu-devel@nongnu.org On 07/29/2009 04:46 PM, Luiz Capitulino wrote: >> >> 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? > I meant QObject as a base type, so it is a lower layer than QDict; QDict implements the QObject methods, as do QString, QNumber, etc. The problem with void *, beyond requiring the user to know what the object type is, is that it is impossible to control object lifecycle. When you destroy a QDict containing void *, you cannot destroy the contained objects. On the other hand if QDict values are all QObjects, then qdict_destroy() can call qobject_destroy() on all of them (qobject_destroy might end up calling qdict_destroy() is a value happened to be a QDict). -- error compiling committee.c: too many arguments to function