1 /* GObject - GLib Type, Object, Parameter and Signal Library 2 * Copyright (C) 2000 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 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, write to the 16 * Free Software Foundation, Inc., 59 Temple Place, Suite 330, 17 * Boston, MA 02111-1307, USA. 18 */ 19 #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) 20 #error "Only <glib-object.h> can be included directly." 21 #endif 22 23 #ifndef __G_TYPE_PLUGIN_H__ 24 #define __G_TYPE_PLUGIN_H__ 25 26 #include <gobject/gtype.h> 27 28 G_BEGIN_DECLS 29 30 /* --- type macros --- */ 31 #define G_TYPE_TYPE_PLUGIN (g_type_plugin_get_type ()) 32 #define G_TYPE_PLUGIN(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TYPE_PLUGIN, GTypePlugin)) 33 #define G_TYPE_PLUGIN_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), G_TYPE_TYPE_PLUGIN, GTypePluginClass)) 34 #define G_IS_TYPE_PLUGIN(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TYPE_PLUGIN)) 35 #define G_IS_TYPE_PLUGIN_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), G_TYPE_TYPE_PLUGIN)) 36 #define G_TYPE_PLUGIN_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), G_TYPE_TYPE_PLUGIN, GTypePluginClass)) 37 38 39 /* --- typedefs & structures --- */ 40 typedef struct _GTypePluginClass GTypePluginClass; 41 /** 42 * GTypePluginUse: 43 * @plugin: the #GTypePlugin whose use count should be increased 44 * 45 * The type of the @use_plugin function of #GTypePluginClass, which gets called 46 * to increase the use count of @plugin. 47 */ 48 typedef void (*GTypePluginUse) (GTypePlugin *plugin); 49 /** 50 * GTypePluginUnuse: 51 * @plugin: the #GTypePlugin whose use count should be decreased 52 * 53 * The type of the @unuse_plugin function of #GTypePluginClass. 54 */ 55 typedef void (*GTypePluginUnuse) (GTypePlugin *plugin); 56 /** 57 * GTypePluginCompleteTypeInfo: 58 * @plugin: the #GTypePlugin 59 * @g_type: the #GType whose info is completed 60 * @info: the #GTypeInfo struct to fill in 61 * @value_table: the #GTypeValueTable to fill in 62 * 63 * The type of the @complete_type_info function of #GTypePluginClass. 64 */ 65 typedef void (*GTypePluginCompleteTypeInfo) (GTypePlugin *plugin, 66 GType g_type, 67 GTypeInfo *info, 68 GTypeValueTable *value_table); 69 /** 70 * GTypePluginCompleteInterfaceInfo: 71 * @plugin: the #GTypePlugin 72 * @instance_type: the #GType of an instantiable type to which the interface 73 * is added 74 * @interface_type: the #GType of the interface whose info is completed 75 * @info: the #GInterfaceInfo to fill in 76 * 77 * The type of the @complete_interface_info function of #GTypePluginClass. 78 */ 79 typedef void (*GTypePluginCompleteInterfaceInfo) (GTypePlugin *plugin, 80 GType instance_type, 81 GType interface_type, 82 GInterfaceInfo *info); 83 /** 84 * GTypePlugin: 85 * 86 * The <structname>GTypePlugin</structname> typedef is used as a placeholder 87 * for objects that implement the <structname>GTypePlugin</structname> 88 * interface. 89 */ 90 /** 91 * GTypePluginClass: 92 * @use_plugin: Increases the use count of the plugin. 93 * @unuse_plugin: Decreases the use count of the plugin. 94 * @complete_type_info: Fills in the #GTypeInfo and 95 * #GTypeValueTable structs for the type. The structs are initialized 96 * with <literal>memset(s, 0, sizeof (s))</literal> before calling 97 * this function. 98 * @complete_interface_info: Fills in missing parts of the #GInterfaceInfo 99 * for the interface. The structs is initialized with 100 * <literal>memset(s, 0, sizeof (s))</literal> before calling 101 * this function. 102 * 103 * The #GTypePlugin interface is used by the type system in order to handle 104 * the lifecycle of dynamically loaded types. 105 */ 106 struct _GTypePluginClass 107 { 108 /*< private >*/ 109 GTypeInterface base_iface; 110 111 /*< public >*/ 112 GTypePluginUse use_plugin; 113 GTypePluginUnuse unuse_plugin; 114 GTypePluginCompleteTypeInfo complete_type_info; 115 GTypePluginCompleteInterfaceInfo complete_interface_info; 116 }; 117 118 119 /* --- prototypes --- */ 120 GType g_type_plugin_get_type (void) G_GNUC_CONST; 121 void g_type_plugin_use (GTypePlugin *plugin); 122 void g_type_plugin_unuse (GTypePlugin *plugin); 123 void g_type_plugin_complete_type_info (GTypePlugin *plugin, 124 GType g_type, 125 GTypeInfo *info, 126 GTypeValueTable *value_table); 127 void g_type_plugin_complete_interface_info (GTypePlugin *plugin, 128 GType instance_type, 129 GType interface_type, 130 GInterfaceInfo *info); 131 132 G_END_DECLS 133 134 #endif /* __G_TYPE_PLUGIN_H__ */ 135