qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Eduardo Habkost <ehabkost@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>, qemu-devel@nongnu.org
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>
Subject: [PULL 05/34] qom: DECLARE_*_CHECKERS macros
Date: Tue,  8 Sep 2020 16:00:54 -0400	[thread overview]
Message-ID: <20200908200123.3402311-6-ehabkost@redhat.com> (raw)
In-Reply-To: <20200908200123.3402311-1-ehabkost@redhat.com>

Sometimes the typedefs are buried inside another header, but
we want to benefit from the automatic definition of type cast
functions.  Introduce macros that will let type checkers be
defined when typedefs are already available.

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Message-Id: <20200831210740.126168-5-ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 include/qom/object.h | 72 +++++++++++++++++++++++++++++++++++---------
 1 file changed, 58 insertions(+), 14 deletions(-)

diff --git a/include/qom/object.h b/include/qom/object.h
index 500e7dfa99..4cd84998c2 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -553,6 +553,62 @@ struct Object
     Object *parent;
 };
 
+/**
+ * DECLARE_INSTANCE_CHECKER:
+ * @InstanceType: instance struct name
+ * @OBJ_NAME: the object name in uppercase with underscore separators
+ * @TYPENAME: type name
+ *
+ * Direct usage of this macro should be avoided, and the complete
+ * OBJECT_DECLARE_TYPE macro is recommended instead.
+ *
+ * This macro will provide the three standard type cast functions for a
+ * QOM type.
+ */
+#define DECLARE_INSTANCE_CHECKER(InstanceType, OBJ_NAME, TYPENAME) \
+    static inline G_GNUC_UNUSED InstanceType * \
+    OBJ_NAME(void *obj) \
+    { return OBJECT_CHECK(InstanceType, obj, TYPENAME); }
+
+/**
+ * DECLARE_CLASS_CHECKERS:
+ * @ClassType: class struct name
+ * @OBJ_NAME: the object name in uppercase with underscore separators
+ * @TYPENAME: type name
+ *
+ * Direct usage of this macro should be avoided, and the complete
+ * OBJECT_DECLARE_TYPE macro is recommended instead.
+ *
+ * This macro will provide the three standard type cast functions for a
+ * QOM type.
+ */
+#define DECLARE_CLASS_CHECKERS(ClassType, OBJ_NAME, TYPENAME) \
+    static inline G_GNUC_UNUSED ClassType * \
+    OBJ_NAME##_GET_CLASS(void *obj) \
+    { return OBJECT_GET_CLASS(ClassType, obj, TYPENAME); } \
+    \
+    static inline G_GNUC_UNUSED ClassType * \
+    OBJ_NAME##_CLASS(void *klass) \
+    { return OBJECT_CLASS_CHECK(ClassType, klass, TYPENAME); }
+
+/**
+ * DECLARE_OBJ_CHECKERS:
+ * @InstanceType: instance struct name
+ * @ClassType: class struct name
+ * @OBJ_NAME: the object name in uppercase with underscore separators
+ * @TYPENAME: type name
+ *
+ * Direct usage of this macro should be avoided, and the complete
+ * OBJECT_DECLARE_TYPE macro is recommended instead.
+ *
+ * This macro will provide the three standard type cast functions for a
+ * QOM type.
+ */
+#define DECLARE_OBJ_CHECKERS(InstanceType, ClassType, OBJ_NAME, TYPENAME) \
+    DECLARE_INSTANCE_CHECKER(InstanceType, OBJ_NAME, TYPENAME) \
+    \
+    DECLARE_CLASS_CHECKERS(ClassType, OBJ_NAME, TYPENAME)
+
 /**
  * OBJECT_DECLARE_TYPE:
  * @InstanceType: instance struct name
@@ -574,20 +630,8 @@ struct Object
     \
     G_DEFINE_AUTOPTR_CLEANUP_FUNC(InstanceType, object_unref) \
     \
-    static inline G_GNUC_UNUSED ClassType * \
-    MODULE_OBJ_NAME##_GET_CLASS(void *obj) \
-    { return OBJECT_GET_CLASS(ClassType, obj, \
-                              TYPE_##MODULE_OBJ_NAME); } \
-    \
-    static inline G_GNUC_UNUSED ClassType * \
-    MODULE_OBJ_NAME##_CLASS(void *klass) \
-    { return OBJECT_CLASS_CHECK(ClassType, klass, \
-                                TYPE_##MODULE_OBJ_NAME); } \
-    \
-    static inline G_GNUC_UNUSED InstanceType * \
-    MODULE_OBJ_NAME(void *obj) \
-    { return OBJECT_CHECK(InstanceType, obj, \
-                          TYPE_##MODULE_OBJ_NAME); }
+    DECLARE_OBJ_CHECKERS(InstanceType, ClassType, \
+                         MODULE_OBJ_NAME, TYPE_##MODULE_OBJ_NAME)
 
 /**
  * OBJECT_DECLARE_SIMPLE_TYPE:
-- 
2.26.2



  parent reply	other threads:[~2020-09-08 20:02 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-08 20:00 [PULL 00/34] QOM boilerplate cleanup (v2) Eduardo Habkost
2020-09-08 20:00 ` [PULL 01/34] memory: Remove kernel-doc comment marker Eduardo Habkost
2020-09-08 20:00 ` [PULL 02/34] qom: make object_ref/unref use a void * instead of Object * Eduardo Habkost
2020-09-08 20:00 ` [PULL 03/34] qom: provide convenient macros for declaring and defining types Eduardo Habkost
2020-09-08 20:00 ` [PULL 04/34] qom: Allow class type name to be specified in OBJECT_DECLARE* Eduardo Habkost
2020-09-08 20:00 ` Eduardo Habkost [this message]
2020-09-08 20:00 ` [PULL 06/34] qom: Make type checker functions accept const pointers Eduardo Habkost
2020-09-08 20:00 ` [PULL 07/34] codeconverter: script for automating QOM code cleanups Eduardo Habkost
2020-09-08 20:00 ` [PULL 08/34] Delete duplicate QOM typedefs Eduardo Habkost
2020-09-08 20:00 ` [PULL 09/34] Move QOM typedefs and add missing includes Eduardo Habkost
2020-09-08 20:00 ` [PULL 10/34] Use DECLARE_*CHECKER* macros Eduardo Habkost
2020-09-08 20:01 ` [PULL 11/34] Use DECLARE_*CHECKER* when possible (--force mode) Eduardo Habkost
2020-09-08 20:01 ` [PULL 12/34] Use OBJECT_DECLARE_TYPE where possible Eduardo Habkost
2020-09-08 20:01 ` [PULL 13/34] Use OBJECT_DECLARE_SIMPLE_TYPE when possible Eduardo Habkost
2020-09-08 20:01 ` [PULL 14/34] gpex: Fix type checking function name Eduardo Habkost
2020-09-08 20:01 ` [PULL 15/34] chardev: Rename TYPE_CHARDEV_* to TYPE_*_CHARDEV Eduardo Habkost
2020-09-08 20:01 ` [PULL 16/34] ap-device: Rename AP_DEVICE_TYPE to TYPE_AP_DEVICE Eduardo Habkost
2020-09-08 20:01 ` [PULL 17/34] dev-smartcard-reader: Rename CCID_DEV_NAME to TYPE_USB_CCID_DEV Eduardo Habkost
2020-09-08 20:01 ` [PULL 18/34] vfio: Rename VFIO_AP_DEVICE_TYPE to TYPE_VFIO_AP_DEVICE Eduardo Habkost
2020-09-08 20:01 ` [PULL 19/34] vmgenid: Rename VMGENID_DEVICE to TYPE_VMGENID Eduardo Habkost
2020-09-08 20:01 ` [PULL 20/34] ahci: Rename ICH_AHCI to ICH9_AHCI Eduardo Habkost
2020-09-08 20:01 ` [PULL 21/34] esp: Rename ESP_STATE to ESP Eduardo Habkost
2020-09-08 20:01 ` [PULL 22/34] filter-rewriter: Rename FILTER_COLO_REWRITER to FILTER_REWRITER Eduardo Habkost
2020-09-08 20:01 ` [PULL 23/34] rs6000_mc: Rename RS6000MC_DEVICE to RS6000MC Eduardo Habkost
2020-09-08 20:01 ` [PULL 24/34] sabre: Rename SABRE_DEVICE to SABRE Eduardo Habkost
2020-09-08 20:01 ` [PULL 25/34] usb: Rename USB_SERIAL_DEV to USB_SERIAL Eduardo Habkost
2020-09-08 20:01 ` [PULL 26/34] vfio: Rename PCI_VFIO to VFIO_PCI Eduardo Habkost
2020-09-08 20:01 ` [PULL 27/34] pc87312: Rename TYPE_PC87312_SUPERIO to TYPE_PC87312 Eduardo Habkost
2020-09-08 20:01 ` [PULL 28/34] tusb6010: Rename TUSB to TUSB6010 Eduardo Habkost
2020-09-08 20:01 ` [PULL 29/34] xilinx_axidma: Use typedef name for instance_size Eduardo Habkost
2020-09-08 20:01 ` [PULL 30/34] omap_intc: " Eduardo Habkost
2020-09-08 20:01 ` [PULL 31/34] lpc_ich9: " Eduardo Habkost
2020-09-08 20:01 ` [PULL 32/34] xilinx_axienet: " Eduardo Habkost
2020-09-08 20:01 ` [PULL 33/34] vhost-user-vga: " Eduardo Habkost
2020-09-08 20:01 ` [PULL 34/34] virtio-vga: " Eduardo Habkost
2020-09-08 20:20 ` [PULL 00/34] QOM boilerplate cleanup (v2) Peter Maydell
2020-09-08 21:29   ` Eduardo Habkost
2020-09-08 21:52 [PULL 00/34] QOM boilerplate cleanup (v3) Eduardo Habkost
2020-09-08 21:52 ` [PULL 05/34] qom: DECLARE_*_CHECKERS macros Eduardo Habkost

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=20200908200123.3402311-6-ehabkost@redhat.com \
    --to=ehabkost@redhat.com \
    --cc=berrange@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --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).