1 /* 2 * libosinfo: 3 * 4 * Copyright (C) 2020 Red Hat, Inc. 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library. If not, see 18 * <http://www.gnu.org/licenses/>. 19 */ 20 21 #ifndef __OSINFO_MACROS_H__ 22 # define __OSINFO_MACROS_H__ 23 24 # include <glib-object.h> 25 26 # define OSINFO_DECLARE_TYPE(ModuleObjName, module_obj_name, MODULE, OBJ_NAME, ParentName) \ 27 G_DECLARE_DERIVABLE_TYPE(ModuleObjName, module_obj_name, MODULE, OBJ_NAME, ParentName) 28 29 # define OSINFO_DECLARE_TYPE_WITH_PRIVATE(ModuleObjName, module_obj_name, MODULE, OBJ_NAME, ParentName) \ 30 GType module_obj_name##_get_type (void); \ 31 G_GNUC_BEGIN_IGNORE_DEPRECATIONS \ 32 typedef struct _##ModuleObjName ModuleObjName; \ 33 typedef struct _##ModuleObjName##Class ModuleObjName##Class; \ 34 typedef struct _##ModuleObjName##Private ModuleObjName##Private; \ 35 struct _##ModuleObjName { ParentName parent_instance; ModuleObjName##Private *priv; }; \ 36 \ 37 _GLIB_DEFINE_AUTOPTR_CHAINUP (ModuleObjName, ParentName) \ 38 \ 39 static inline ModuleObjName * MODULE##_##OBJ_NAME (gpointer ptr) { \ 40 return G_TYPE_CHECK_INSTANCE_CAST (ptr, module_obj_name##_get_type (), ModuleObjName); } \ 41 static inline ModuleObjName##Class * MODULE##_##OBJ_NAME##_CLASS (gpointer ptr) { \ 42 return G_TYPE_CHECK_CLASS_CAST (ptr, module_obj_name##_get_type (), ModuleObjName##Class); } \ 43 static inline gboolean MODULE##_IS_##OBJ_NAME (gpointer ptr) { \ 44 return G_TYPE_CHECK_INSTANCE_TYPE (ptr, module_obj_name##_get_type ()); } \ 45 static inline gboolean MODULE##_IS_##OBJ_NAME##_CLASS (gpointer ptr) { \ 46 return G_TYPE_CHECK_CLASS_TYPE (ptr, module_obj_name##_get_type ()); } \ 47 static inline ModuleObjName##Class * MODULE##_##OBJ_NAME##_GET_CLASS (gpointer ptr) { \ 48 return G_TYPE_INSTANCE_GET_CLASS (ptr, module_obj_name##_get_type (), ModuleObjName##Class); } \ 49 G_GNUC_END_IGNORE_DEPRECATIONS 50 51 # define OSINFO_DECLARE_TYPE_WITH_PRIVATE_AND_CLASS(ModuleObjName, module_obj_name, MODULE, OBJ_NAME, ParentName) \ 52 GType module_obj_name##_get_type (void); \ 53 G_GNUC_BEGIN_IGNORE_DEPRECATIONS \ 54 typedef struct _##ModuleObjName ModuleObjName; \ 55 typedef struct _##ModuleObjName##Class ModuleObjName##Class; \ 56 typedef struct _##ModuleObjName##Private ModuleObjName##Private; \ 57 struct _##ModuleObjName { ParentName parent_instance; ModuleObjName##Private *priv; }; \ 58 struct _##ModuleObjName##Class { ParentName##Class parent_class ; }; \ 59 \ 60 _GLIB_DEFINE_AUTOPTR_CHAINUP (ModuleObjName, ParentName) \ 61 G_DEFINE_AUTOPTR_CLEANUP_FUNC (ModuleObjName##Class, g_type_class_unref) \ 62 \ 63 G_GNUC_UNUSED static inline ModuleObjName * MODULE##_##OBJ_NAME (gpointer ptr) { \ 64 return G_TYPE_CHECK_INSTANCE_CAST (ptr, module_obj_name##_get_type (), ModuleObjName); } \ 65 G_GNUC_UNUSED static inline ModuleObjName##Class * MODULE##_##OBJ_NAME##_CLASS (gpointer ptr) { \ 66 return G_TYPE_CHECK_CLASS_CAST (ptr, module_obj_name##_get_type (), ModuleObjName##Class); } \ 67 G_GNUC_UNUSED static inline gboolean MODULE##_IS_##OBJ_NAME (gpointer ptr) { \ 68 return G_TYPE_CHECK_INSTANCE_TYPE (ptr, module_obj_name##_get_type ()); } \ 69 G_GNUC_UNUSED static inline gboolean MODULE##_IS_##OBJ_NAME##_CLASS (gpointer ptr) { \ 70 return G_TYPE_CHECK_CLASS_TYPE (ptr, module_obj_name##_get_type ()); } \ 71 G_GNUC_UNUSED static inline ModuleObjName##Class * MODULE##_##OBJ_NAME##_GET_CLASS (gpointer ptr) { \ 72 return G_TYPE_INSTANCE_GET_CLASS (ptr, module_obj_name##_get_type (), ModuleObjName##Class); } \ 73 G_GNUC_END_IGNORE_DEPRECATIONS 74 75 #endif /* __OSINFO_MACROS_H__ */ 76