<!-- ##### SECTION Title ##### -->
GTypeModule

<!-- ##### SECTION Short_Description ##### -->
Type loading modules

<!-- ##### SECTION Long_Description ##### -->
<para>
#GTypeModule provides a simple implementation of the #GTypePlugin
interface. The model of #GTypeModule is a dynamically loaded module
which implements some number of types and interface
implementations. When the module is loaded, it registers its types
and interfaces using g_type_module_register_type() and
g_type_module_add_interface().  As long as any instances of these
types and interface implementations are in use, the module is kept
loaded. When the types and interfaces are gone, the module may be
unloaded. If the types and interfaces become used again, the module
will be reloaded.
</para>
<para>
Keeping track of whether the module should be loaded or not is done by
using a use count - it starts at zero, and whenever it is greater than
zero, the module is loaded. The use count is maintained internally by
the type system, but also can be explicitly controlled by
g_type_module_use() and g_type_module_unuse(). Typically, when loading
a module for the first type, g_type_module_use() will be used to load
it so that it can initialize its types. At some later point, when the
module no longer needs to be loaded except for the type
implementations it contains, g_type_module_unuse() is called.
</para>
<para>
#GTypeModule does not actually provide any implementation of module
loading and unloading. To create a particular module type you must
derive from #GTypeModule and implement the load and unload functions
in #GTypeModuleClass.
</para>

<!-- ##### SECTION See_Also ##### -->
<para>
<variablelist>

<varlistentry>
<term>#GTypePlugin</term>
<listitem><para>The abstract type loader interface.</para></listitem>
</varlistentry>

<varlistentry>
<term>#GModule</term>
<listitem><para>Portable mechanism for dynamically loaded modules.</para></listitem>
</varlistentry>

</variablelist>
</para>

<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### STRUCT GTypeModule ##### -->
<para>
The members of the <structname>GTypeModule</structname> structure should not 
be accessed directly, except for the @name field.
</para>

@name: the name of the module

<!-- ##### STRUCT GTypeModuleClass ##### -->
<para>
In order to implement dynamic loading of types based on #GTypeModule, 
the @load and @unload functions in #GTypeModuleClass must be implemented.
</para>

@parent_class: the parent class
@load: loads the module and registers one or more types using
  g_type_module_register_type().
@unload: unloads the module

<!-- ##### FUNCTION g_type_module_use ##### -->
<para>
Increases the use count of a #GTypeModule by one. If the
use count was zero before, the plugin will be loaded.
</para>

@module: a #GTypeModule
@Returns: %FALSE if the plugin needed to be loaded and
          loading the plugin failed.


<!-- ##### FUNCTION g_type_module_unuse ##### -->
<para>
Decreases the use count of a #GTypeModule by one. If the
result is zero, the module will be unloaded. (However, the
#GTypeModule will not be freed, and types associated with the
#GTypeModule are not unregistered. Once a #GTypeModule is 
initialized, it must exist forever.)
</para>

@module: a #GTypeModule


<!-- ##### FUNCTION g_type_module_set_name ##### -->
<para>
Sets the name for a #GTypeModule 
</para>

@module: a #GTypeModule.
@name: a human-readable name to use in error messages.


<!-- ##### FUNCTION g_type_module_register_type ##### -->
<para>
Looks up or registers a type that is implemented with a particular
type plugin. If a type with name @type_name was previously registered,
the #GType identifier for the type is returned, otherwise the type
is newly registered, and the resulting #GType identifier returned.
</para>
<para>
When reregistering a type (typically because a module is unloaded
then reloaded, and reinitialized), @module and @parent_type must
be the same as they were previously.
</para>
<para>
As long as any instances of the type exist, the type plugin will
not be unloaded.
</para>

@module:  a #GTypeModule
@parent_type:    the type for the parent class
@type_name:      name for the type
@type_info:      type information structure
@flags:          flags field providing details about the type
@Returns: the new or existing type ID


<!-- ##### FUNCTION g_type_module_add_interface ##### -->
<para>
Registers an additional interface for a type, whose interface
lives in the given type plugin. If the interface was already registered
for the type in this plugin, nothing will be done. 
</para>
<para>
As long as any instances of the type exist, the type plugin will
not be unloaded.
</para>

@module: a #GTypeModule
@instance_type: type to which to add the interface.
@interface_type: interface type to add
@interface_info: type information structure


<!-- ##### FUNCTION g_type_module_register_enum ##### -->
<para>
Looks up or registers an enumeration that is implemented with a particular
type plugin. If a type with name @type_name was previously registered,
the #GType identifier for the type is returned, otherwise the type
is newly registered, and the resulting #GType identifier returned.
</para>
<para>
As long as any instances of the type exist, the type plugin will
not be unloaded.
</para>

@module:              a #GTypeModule
@name:                name for the type
@const_static_values: an array of #GEnumValue structs for the possible
  enumeration values. The array is terminated by a struct with all 
  members being 0.
@Returns: the new or existing type ID
@Since: 2.6


<!-- ##### FUNCTION g_type_module_register_flags ##### -->
<para>
Looks up or registers a flags type that is implemented with a particular
type plugin. If a type with name @type_name was previously registered,
the #GType identifier for the type is returned, otherwise the type
is newly registered, and the resulting #GType identifier returned.
</para>
<para>
As long as any instances of the type exist, the type plugin will
not be unloaded.
</para>

@module:              a #GTypeModule
@name:                name for the type
@const_static_values: an array of #GFlagsValue structs for the possible
  flags values. The array is terminated by a struct with all 
  members being 0.
@Returns: the new or existing type ID
@Since: 2.6


