[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 04/27] qom: DECLARE_*_CHECKERS macros
From: |
Eduardo Habkost |
Subject: |
[PULL 04/27] qom: DECLARE_*_CHECKERS macros |
Date: |
Thu, 3 Sep 2020 16:52:24 -0400 |
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
- [PULL 00/27] QOM boilerplate cleanup, Eduardo Habkost, 2020/09/03
- [PULL 01/27] qom: make object_ref/unref use a void * instead of Object *., Eduardo Habkost, 2020/09/03
- [PULL 03/27] qom: Allow class type name to be specified in OBJECT_DECLARE*, Eduardo Habkost, 2020/09/03
- [PULL 04/27] qom: DECLARE_*_CHECKERS macros,
Eduardo Habkost <=
- [PULL 02/27] qom: provide convenient macros for declaring and defining types, Eduardo Habkost, 2020/09/03
- [PULL 05/27] qom: Make type checker functions accept const pointers, Eduardo Habkost, 2020/09/03
- [PULL 07/27] Delete duplicate QOM typedefs, Eduardo Habkost, 2020/09/03
- [PULL 06/27] codeconverter: script for automating QOM code cleanups, Eduardo Habkost, 2020/09/03
- [PULL 10/27] Use DECLARE_*CHECKER* when possible (--force mode), Eduardo Habkost, 2020/09/03
- [PULL 12/27] Use OBJECT_DECLARE_SIMPLE_TYPE when possible, Eduardo Habkost, 2020/09/03
- [PULL 13/27] gpex: Fix type checking function name, Eduardo Habkost, 2020/09/03
- [PULL 09/27] Use DECLARE_*CHECKER* macros, Eduardo Habkost, 2020/09/03
- [PULL 16/27] dev-smartcard-reader: Rename CCID_DEV_NAME to TYPE_USB_CCID_DEV, Eduardo Habkost, 2020/09/03
- [PULL 14/27] chardev: Rename TYPE_CHARDEV_* to TYPE_*_CHARDEV, Eduardo Habkost, 2020/09/03