• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* GObject - GLib Type, Object, Parameter and Signal Library
2  * Copyright (C) 2003 Red Hat, Inc.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General
15  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #ifndef __TEST_COMMON_H__
19 #define __TEST_COMMON_H__
20 
21 G_BEGIN_DECLS
22 
23 #define DEFINE_TYPE_FULL(name, prefix,				\
24 		         class_init, base_init, instance_init,	\
25 		         parent_type, interface_decl)		\
26 GType								\
27 prefix ## _get_type (void)					\
28 {								\
29   static GType object_type = 0;					\
30 								\
31   if (!object_type)						\
32     {								\
33       static const GTypeInfo object_info =			\
34 	{							\
35 	  sizeof (name ## Class),				\
36 	  (GBaseInitFunc) base_init,				\
37 	  (GBaseFinalizeFunc) NULL,				\
38 	  (GClassInitFunc) class_init,				\
39 	  (GClassFinalizeFunc) NULL,				\
40 	  NULL,           /* class_data */			\
41 	  sizeof (name),					\
42 	  0,             /* n_prelocs */			\
43 	  (GInstanceInitFunc) instance_init,			\
44 	  (const GTypeValueTable *) NULL,			\
45 	};							\
46 								\
47       object_type = g_type_register_static (parent_type,	\
48 					    # name,		\
49 					    &object_info, 0);	\
50       interface_decl						\
51     }								\
52 								\
53   return object_type;						\
54 }
55 
56 #define DEFINE_TYPE(name, prefix,				\
57 		    class_init, base_init, instance_init,	\
58 		    parent_type)				\
59   DEFINE_TYPE_FULL(name, prefix, class_init, base_init,		\
60 		   instance_init, parent_type, {})
61 
62 #define DEFINE_IFACE(name, prefix, base_init, dflt_init)	\
63 GType								\
64 prefix ## _get_type (void)					\
65 {								\
66   static GType iface_type = 0;					\
67 								\
68   if (!iface_type)						\
69     {								\
70       static const GTypeInfo iface_info =			\
71       {								\
72 	sizeof (name ## Class),					\
73 	(GBaseInitFunc)	base_init,				\
74 	(GBaseFinalizeFunc) NULL,				\
75 	(GClassInitFunc) dflt_init,				\
76 	(GClassFinalizeFunc) NULL,				\
77 	(gconstpointer) NULL,					\
78 	(guint16) 0,						\
79 	(guint16) 0,						\
80 	(GInstanceInitFunc) NULL,				\
81 	(const GTypeValueTable*) NULL,				\
82       };							\
83 								\
84       iface_type = g_type_register_static (G_TYPE_INTERFACE,	\
85 					    # name,		\
86 					    &iface_info, 0);	\
87     }								\
88   return iface_type;						\
89 }
90 
91 #define INTERFACE_FULL(type, init_func, iface_type)		\
92 {								\
93   static GInterfaceInfo const iface =				\
94     {								\
95       (GInterfaceInitFunc) init_func, NULL, NULL		\
96     };								\
97 								\
98   g_type_add_interface_static (type, iface_type, &iface);	\
99 }
100 #define INTERFACE(init_func, iface_type)	\
101   INTERFACE_FULL(object_type, init_func, iface_type)
102 
103 G_END_DECLS
104 
105 #endif /* __TEST_COMMON_H__ */
106