qapi: Add qobject_to()
commit1a56b1e2ab5e9d6d89386ca953b4afb419e15abe
authorMax Reitz <mreitz@redhat.com>
Sat, 24 Feb 2018 15:40:28 +0000 (24 16:40 +0100)
committerEric Blake <eblake@redhat.com>
Mon, 19 Mar 2018 19:49:04 +0000 (19 14:49 -0500)
tree63b90fb88991f9bfa449be1c7d0b4385ea7c834b
parent9139b5672360aaa263da1d96cdfdbe16accb6e3b
qapi: Add qobject_to()

This is a dynamic casting macro that, given a QObject type, returns an
object as that type or NULL if the object is of a different type (or
NULL itself).

The macro uses lower-case letters because:
1. There does not seem to be a hard rule on whether qemu macros have to
   be upper-cased,
2. The current situation in qapi/qmp is inconsistent (compare e.g.
   QINCREF() vs. qdict_put()),
3. qobject_to() will evaluate its @obj parameter only once, thus it is
   generally not important to the caller whether it is a macro or not,
4. I prefer it aesthetically.

The macro parameter order is chosen with typename first for
consistency with other QAPI macros like QAPI_CLONE(), as well as
for legibility (read it as "qobject to" type "applied to" obj).

Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-Id: <20180224154033.29559-3-mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
[eblake: swap parameter order to list type first, avoid clang ubsan
warning on QOBJECT(NULL) and container_of(NULL,type,base)]
Signed-off-by: Eric Blake <eblake@redhat.com>
include/qapi/qmp/qobject.h