mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-10 03:16:17 +01:00
Migrating docs.
* docs/reference/gobject/tmpl/gtype.sgml: * gobject/gtype.c: * gobject/gtype.h: * gobject/gvaluetypes.h: Migrating docs. svn path=/trunk/; revision=7075
This commit is contained in:
parent
4b109856d0
commit
005be9980a
@ -1,3 +1,11 @@
|
||||
2008-06-21 Stefan Kost <ensonic@users.sf.net>
|
||||
|
||||
* docs/reference/gobject/tmpl/gtype.sgml:
|
||||
* gobject/gtype.c:
|
||||
* gobject/gtype.h:
|
||||
* gobject/gvaluetypes.h:
|
||||
Migrating docs.
|
||||
|
||||
2008-06-21 Stefan Kost <ensonic@users.sf.net>
|
||||
|
||||
* gobject/gclosure.h:
|
||||
|
File diff suppressed because it is too large
Load Diff
602
gobject/gtype.c
602
gobject/gtype.c
@ -16,6 +16,42 @@
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
/**
|
||||
* SECTION:gtype
|
||||
* @Short_description: The GLib Runtime type identification and management system
|
||||
* @Title:Type Information
|
||||
*
|
||||
* The GType API is the foundation of the GObject system. It provides the
|
||||
* facilities for registering and managing all fundamental data types,
|
||||
* user-defined object and interface types. Before using any GType
|
||||
* or GObject functions, g_type_init() must be called to initialize the
|
||||
* type system.
|
||||
*
|
||||
* For type creation and registration purposes, all types fall into one of
|
||||
* two categories: static or dynamic. Static types are never loaded or
|
||||
* unloaded at run-time as dynamic types may be. Static types are created
|
||||
* with g_type_register_static() that gets type specific information passed
|
||||
* in via a #GTypeInfo structure.
|
||||
* Dynamic types are created with g_type_register_dynamic() which takes a
|
||||
* #GTypePlugin structure instead. The remaining type information (the
|
||||
* #GTypeInfo structure) is retrieved during runtime through #GTypePlugin
|
||||
* and the g_type_plugin_*() API.
|
||||
* These registration functions are usually called only once from a
|
||||
* function whose only purpose is to return the type identifier for a
|
||||
* specific class. Once the type (or class or interface) is registered,
|
||||
* it may be instantiated, inherited, or implemented depending on exactly
|
||||
* what sort of type it is.
|
||||
* There is also a third registration function for registering fundamental
|
||||
* types called g_type_register_fundamental() which requires both a #GTypeInfo
|
||||
* structure and a #GTypeFundamentalInfo structure but it is seldom used
|
||||
* since most fundamental types are predefined rather than user-defined.
|
||||
*
|
||||
* A final word about type names.
|
||||
* Such an identifier needs to be at least three characters long. There is no
|
||||
* upper length limit. The first character needs to be a letter (a-z or A-Z)
|
||||
* or an underscore '_'. Subsequent characters can be letters, numbers or
|
||||
* any of '-_+'.
|
||||
*/
|
||||
#include <config.h>
|
||||
#include "gtype.h"
|
||||
|
||||
@ -1255,6 +1291,17 @@ type_iface_add_prerequisite_W (TypeNode *iface,
|
||||
type_iface_add_prerequisite_W (lookup_type_node_I (dependants[i]), prerequisite_node);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_interface_add_prerequisite:
|
||||
* @interface_type: #GType value of an interface type.
|
||||
* @prerequisite_type: #GType value of an interface or instantiatable type.
|
||||
*
|
||||
* Adds @prerequisite_type to the list of prerequisites of @interface_type.
|
||||
* This means that any type implementing @interface_type must also implement
|
||||
* @prerequisite_type. Prerequisites can be thought of as an alternative to
|
||||
* interface derivation (which GType doesn't support). An interface can have
|
||||
* at most one instantiatable prerequisite type.
|
||||
*/
|
||||
void
|
||||
g_type_interface_add_prerequisite (GType interface_type,
|
||||
GType prerequisite_type)
|
||||
@ -1330,7 +1377,18 @@ g_type_interface_add_prerequisite (GType interface_type,
|
||||
}
|
||||
}
|
||||
|
||||
GType* /* free result */
|
||||
/**
|
||||
* g_type_interface_prerequisites:
|
||||
* @interface_type: an interface type
|
||||
* @n_prerequisites: location to return the number of prerequisites, or %NULL
|
||||
*
|
||||
* Returns the prerequisites of an interfaces type.
|
||||
*
|
||||
* Since: 2.2
|
||||
* Returns: a newly-allocated zero-terminated array of #GType containing
|
||||
* the prerequisites of @interface_type
|
||||
*/
|
||||
GType*
|
||||
g_type_interface_prerequisites (GType interface_type,
|
||||
guint *n_prerequisites)
|
||||
{
|
||||
@ -1526,6 +1584,26 @@ instance_real_class_get (gpointer instance)
|
||||
return class;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_create_instance:
|
||||
* @type: An instantiatable type to create an instance for.
|
||||
*
|
||||
* Creates and initializes an instance of @type if @type is valid and can
|
||||
* be instantiated. The type system only performs basic allocation and
|
||||
* structure setups for instances: actual instance creation should happen
|
||||
* through functions supplied by the type's fundamental type implementation.
|
||||
* So use of g_type_create_instance() is reserved for implementators of
|
||||
* fundamental types only. E.g. instances of the #GObject hierarchy
|
||||
* should be created via g_object_new() and <emphasis>never</emphasis>
|
||||
* directly through g_type_create_instance() which doesn't handle
|
||||
* things like singleton objects or object construction.
|
||||
* Note: Do <emphasis>not</emphasis> use this function, unless you're
|
||||
* implementing a fundamental type. Also language bindings should <emphasis>not</emphasis>
|
||||
* use this function but g_object_new() instead.
|
||||
*
|
||||
* Returns: An allocated and initialized instance, subject to further
|
||||
* treatment by the fundamental type implementation.
|
||||
*/
|
||||
GTypeInstance*
|
||||
g_type_create_instance (GType type)
|
||||
{
|
||||
@ -1577,6 +1655,16 @@ g_type_create_instance (GType type)
|
||||
return instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_free_instance:
|
||||
* @instance: an instance of a type.
|
||||
*
|
||||
* Frees an instance of a type, returning it to the instance pool for the type,
|
||||
* if there is one.
|
||||
*
|
||||
* Like g_type_create_instance(), this function is reserved for implementors of
|
||||
* fundamental types.
|
||||
*/
|
||||
void
|
||||
g_type_free_instance (GTypeInstance *instance)
|
||||
{
|
||||
@ -2067,6 +2155,19 @@ type_data_last_unref_Wm (GType type,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_add_class_cache_func:
|
||||
* @cache_data: data to be passed to @cache_func
|
||||
* @cache_func: a #GTypeClassCacheFunc
|
||||
*
|
||||
* Adds a #GTypeClassCacheFunc to be called before the reference count of a
|
||||
* class goes from one to zero. This can be used to prevent premature class
|
||||
* destruction. All installed #GTypeClassCacheFunc functions will be chained
|
||||
* until one of them returns %TRUE. The functions have to check the class id
|
||||
* passed in to figure whether they actually want to cache the class of this
|
||||
* type, since all classes are routed through the same #GTypeClassCacheFunc
|
||||
* chain.
|
||||
*/
|
||||
void
|
||||
g_type_add_class_cache_func (gpointer cache_data,
|
||||
GTypeClassCacheFunc cache_func)
|
||||
@ -2083,6 +2184,15 @@ g_type_add_class_cache_func (gpointer cache_data,
|
||||
G_WRITE_UNLOCK (&type_rw_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_remove_class_cache_func:
|
||||
* @cache_data: data that was given when adding @cache_func
|
||||
* @cache_func: a #GTypeClassCacheFunc
|
||||
*
|
||||
* Removes a previously installed #GTypeClassCacheFunc. The cache maintained
|
||||
* by @cache_func has to be empty when calling g_type_remove_class_cache_func()
|
||||
* to avoid leaks.
|
||||
*/
|
||||
void
|
||||
g_type_remove_class_cache_func (gpointer cache_data,
|
||||
GTypeClassCacheFunc cache_func)
|
||||
@ -2113,6 +2223,24 @@ g_type_remove_class_cache_func (gpointer cache_data,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* g_type_add_interface_check:
|
||||
* @check_data: data to pass to @check_func
|
||||
* @check_func: function to be called after each interface
|
||||
* is initialized.
|
||||
*
|
||||
* Adds a function to be called after an interface vtable is
|
||||
* initialized for any class (i.e. after the @interface_init
|
||||
* member of #GInterfaceInfo has been called).
|
||||
*
|
||||
* This function is useful when you want to check an invariant
|
||||
* that depends on the interfaces of a class. For instance,
|
||||
* the implementation of #GObject uses this facility to check
|
||||
* that an object implements all of the properties that are
|
||||
* defined on its interfaces.
|
||||
*
|
||||
* Since: 2.4
|
||||
*/
|
||||
void
|
||||
g_type_add_interface_check (gpointer check_data,
|
||||
GTypeInterfaceCheckFunc check_func)
|
||||
@ -2129,6 +2257,16 @@ g_type_add_interface_check (gpointer check_data,
|
||||
G_WRITE_UNLOCK (&type_rw_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_remove_interface_check:
|
||||
* @check_data: callback data passed to g_type_add_interface_check()
|
||||
* @check_func: callback function passed to g_type_add_interface_check()
|
||||
*
|
||||
* Removes an interface check function added with
|
||||
* g_type_add_interface_check().
|
||||
*
|
||||
* Since: 2.4
|
||||
*/
|
||||
void
|
||||
g_type_remove_interface_check (gpointer check_data,
|
||||
GTypeInterfaceCheckFunc check_func)
|
||||
@ -2159,6 +2297,23 @@ g_type_remove_interface_check (gpointer check_data,
|
||||
}
|
||||
|
||||
/* --- type registration --- */
|
||||
/**
|
||||
* g_type_register_fundamental:
|
||||
* @type_id: A predefined type identifier.
|
||||
* @type_name: 0-terminated string used as the name of the new type.
|
||||
* @info: The #GTypeInfo structure for this type.
|
||||
* @finfo: The #GTypeFundamentalInfo structure for this type.
|
||||
* @flags: Bitwise combination of #GTypeFlags values.
|
||||
*
|
||||
* Registers @type_id as the predefined identifier and @type_name as the
|
||||
* name of a fundamental type. The type system uses the information
|
||||
* contained in the #GTypeInfo structure pointed to by @info and the
|
||||
* #GTypeFundamentalInfo structure pointed to by @finfo to manage the
|
||||
* type and its instances. The value of @flags determines additional
|
||||
* characteristics of the fundamental type.
|
||||
*
|
||||
* Returns: The predefined type identifier.
|
||||
*/
|
||||
GType
|
||||
g_type_register_fundamental (GType type_id,
|
||||
const gchar *type_name,
|
||||
@ -2211,6 +2366,24 @@ g_type_register_fundamental (GType type_id,
|
||||
return NODE_TYPE (node);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_register_static_simple:
|
||||
* @parent_type: Type from which this type will be derived.
|
||||
* @type_name: 0-terminated string used as the name of the new type.
|
||||
* @class_size: Size of the class structure (see #GTypeInfo)
|
||||
* @class_init: Location of the class initialization function (see #GTypeInfo)
|
||||
* @instance_size: Size of the instance structure (see #GTypeInfo)
|
||||
* @instance_init: Location of the instance initialization function (see #GTypeInfo)
|
||||
* @flags: Bitwise combination of #GTypeFlags values.
|
||||
*
|
||||
* Registers @type_name as the name of a new static type derived from
|
||||
* @parent_type. The value of @flags determines the nature (e.g.
|
||||
* abstract or not) of the type. It works by filling a #GTypeInfo
|
||||
* struct and calling g_type_register_static().
|
||||
*
|
||||
* Since: 2.12
|
||||
* Returns: The new type identifier.
|
||||
*/
|
||||
GType
|
||||
g_type_register_static_simple (GType parent_type,
|
||||
const gchar *type_name,
|
||||
@ -2236,6 +2409,21 @@ g_type_register_static_simple (GType parent_type,
|
||||
return g_type_register_static (parent_type, type_name, &info, flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_register_static:
|
||||
* @parent_type: Type from which this type will be derived.
|
||||
* @type_name: 0-terminated string used as the name of the new type.
|
||||
* @info: The #GTypeInfo structure for this type.
|
||||
* @flags: Bitwise combination of #GTypeFlags values.
|
||||
*
|
||||
* Registers @type_name as the name of a new static type derived from
|
||||
* @parent_type. The type system uses the information contained in the
|
||||
* #GTypeInfo structure pointed to by @info to manage the type and its
|
||||
* instances (if not abstract). The value of @flags determines the nature
|
||||
* (e.g. abstract or not) of the type.
|
||||
*
|
||||
* Returns: The new type identifier.
|
||||
*/
|
||||
GType
|
||||
g_type_register_static (GType parent_type,
|
||||
const gchar *type_name,
|
||||
@ -2276,6 +2464,21 @@ g_type_register_static (GType parent_type,
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_register_dynamic:
|
||||
* @parent_type: Type from which this type will be derived.
|
||||
* @type_name: 0-terminated string used as the name of the new type.
|
||||
* @plugin: The #GTypePlugin structure to retrieve the #GTypeInfo from.
|
||||
* @flags: Bitwise combination of #GTypeFlags values.
|
||||
*
|
||||
* Registers @type_name as the name of a new dynamic type derived from
|
||||
* @parent_type. The type system uses the information contained in the
|
||||
* #GTypePlugin structure pointed to by @plugin to manage the type and its
|
||||
* instances (if not abstract). The value of @flags determines the nature
|
||||
* (e.g. abstract or not) of the type.
|
||||
*
|
||||
* Returns: The new type identifier or #G_TYPE_INVALID if registration failed.
|
||||
*/
|
||||
GType
|
||||
g_type_register_dynamic (GType parent_type,
|
||||
const gchar *type_name,
|
||||
@ -2305,6 +2508,17 @@ g_type_register_dynamic (GType parent_type,
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_add_interface_static:
|
||||
* @instance_type: #GType value of an instantiable type.
|
||||
* @interface_type: #GType value of an interface type.
|
||||
* @info: The #GInterfaceInfo structure for this
|
||||
* (@instance_type, @interface_type) combination.
|
||||
*
|
||||
* Adds the static @interface_type to @instantiable_type. The information
|
||||
* contained in the #GTypeInterfaceInfo structure pointed to by @info
|
||||
* is used to manage the relationship.
|
||||
*/
|
||||
void
|
||||
g_type_add_interface_static (GType instance_type,
|
||||
GType interface_type,
|
||||
@ -2331,6 +2545,16 @@ g_type_add_interface_static (GType instance_type,
|
||||
g_static_rec_mutex_unlock (&class_init_rec_mutex);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_add_interface_dynamic:
|
||||
* @instance_type: the #GType value of an instantiable type.
|
||||
* @interface_type: the #GType value of an interface type.
|
||||
* @plugin: the #GTypePlugin structure to retrieve the #GInterfaceInfo from.
|
||||
*
|
||||
* Adds the dynamic @interface_type to @instantiable_type. The information
|
||||
* contained in the #GTypePlugin structure pointed to by @plugin
|
||||
* is used to manage the relationship.
|
||||
*/
|
||||
void
|
||||
g_type_add_interface_dynamic (GType instance_type,
|
||||
GType interface_type,
|
||||
@ -2359,6 +2583,16 @@ g_type_add_interface_dynamic (GType instance_type,
|
||||
|
||||
|
||||
/* --- public API functions --- */
|
||||
/**
|
||||
* g_type_class_ref:
|
||||
* @type: Type ID of a classed type.
|
||||
*
|
||||
* Increments the reference count of the class structure belonging to
|
||||
* @type. This function will demand-create the class if it doesn't
|
||||
* exist already.
|
||||
*
|
||||
* Returns: The #GTypeClass structure for the given type ID.
|
||||
*/
|
||||
gpointer
|
||||
g_type_class_ref (GType type)
|
||||
{
|
||||
@ -2409,6 +2643,15 @@ g_type_class_ref (GType type)
|
||||
return node->data->class.class;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_class_unref:
|
||||
* @g_class: The #GTypeClass structure to unreference.
|
||||
*
|
||||
* Decrements the reference count of the class structure being passed in.
|
||||
* Once the last reference count of a class has been released, classes
|
||||
* may be finalized by the type system, so further dereferencing of a
|
||||
* class pointer after g_type_class_unref() are invalid.
|
||||
*/
|
||||
void
|
||||
g_type_class_unref (gpointer g_class)
|
||||
{
|
||||
@ -2428,6 +2671,15 @@ g_type_class_unref (gpointer g_class)
|
||||
G_WRITE_UNLOCK (&type_rw_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_class_unref_uncached:
|
||||
* @g_class: The #GTypeClass structure to unreference.
|
||||
*
|
||||
* A variant of g_type_class_unref() for use in #GTypeClassCacheFunc
|
||||
* implementations. It unreferences a class without consulting the chain
|
||||
* of #GTypeClassCacheFunc<!-- -->s, avoiding the recursion which would occur
|
||||
* otherwise.
|
||||
*/
|
||||
void
|
||||
g_type_class_unref_uncached (gpointer g_class)
|
||||
{
|
||||
@ -2447,6 +2699,18 @@ g_type_class_unref_uncached (gpointer g_class)
|
||||
G_WRITE_UNLOCK (&type_rw_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_class_peek:
|
||||
* @type: Type ID of a classed type.
|
||||
*
|
||||
* This function is essentially the same as g_type_class_ref(), except that
|
||||
* the classes reference count isn't incremented. As a consequence, this function
|
||||
* may return %NULL if the class of the type passed in does not currently
|
||||
* exist (hasn't been referenced before).
|
||||
*
|
||||
* Returns: The #GTypeClass structure for the given type ID or %NULL
|
||||
* if the class does not currently exist.
|
||||
*/
|
||||
gpointer
|
||||
g_type_class_peek (GType type)
|
||||
{
|
||||
@ -2464,6 +2728,17 @@ g_type_class_peek (GType type)
|
||||
return class;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_class_peek_static:
|
||||
* @type: Type ID of a classed type.
|
||||
*
|
||||
* A more efficient version of g_type_class_peek() which works only for
|
||||
* static types.
|
||||
*
|
||||
* Since: 2.4
|
||||
* Returns: The #GTypeClass structure for the given type ID or %NULL
|
||||
* if the class does not currently exist or is dynamically loaded.
|
||||
*/
|
||||
gpointer
|
||||
g_type_class_peek_static (GType type)
|
||||
{
|
||||
@ -2483,6 +2758,23 @@ g_type_class_peek_static (GType type)
|
||||
return class;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_class_peek_parent:
|
||||
* @g_class: The #GTypeClass structure to retrieve the parent class for.
|
||||
*
|
||||
* This is a convenience function often needed in class initializers.
|
||||
* It returns the class structure of the immediate parent type of the class passed in.
|
||||
* Since derived classes hold
|
||||
* a reference count on their parent classes as long as they are instantiated,
|
||||
* the returned class will always exist. This function is essentially
|
||||
* equivalent to:
|
||||
*
|
||||
* <programlisting>
|
||||
* g_type_class_peek (g_type_parent (G_TYPE_FROM_CLASS (g_class)));
|
||||
* </programlisting>
|
||||
*
|
||||
* Returns: The parent class of @g_class.
|
||||
*/
|
||||
gpointer
|
||||
g_type_class_peek_parent (gpointer g_class)
|
||||
{
|
||||
@ -2507,6 +2799,17 @@ g_type_class_peek_parent (gpointer g_class)
|
||||
return class;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_interface_peek:
|
||||
* @instance_class: A #GTypeClass structure.
|
||||
* @iface_type: An interface ID which this class conforms to.
|
||||
*
|
||||
* Returns the #GTypeInterface structure of an interface to which the passed in
|
||||
* class conforms.
|
||||
*
|
||||
* Returns: The GTypeInterface structure of iface_type if implemented
|
||||
* by @instance_class, %NULL otherwise
|
||||
*/
|
||||
gpointer
|
||||
g_type_interface_peek (gpointer instance_class,
|
||||
GType iface_type)
|
||||
@ -2538,6 +2841,19 @@ g_type_interface_peek (gpointer instance_class,
|
||||
return vtable;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_interface_peek_parent:
|
||||
* @g_iface: A #GTypeInterface structure.
|
||||
*
|
||||
* Returns the corresponding #GTypeInterface structure of the parent type
|
||||
* of the instance type to which @g_iface belongs. This is useful when
|
||||
* deriving the implementation of an interface from the parent type and
|
||||
* then possibly overriding some methods.
|
||||
*
|
||||
* Returns: The corresponding #GTypeInterface structure of the parent type
|
||||
* of the instance type to which @g_iface belongs, or %NULL if the parent type
|
||||
* doesn't conform to the interface.
|
||||
*/
|
||||
gpointer
|
||||
g_type_interface_peek_parent (gpointer g_iface)
|
||||
{
|
||||
@ -2570,6 +2886,27 @@ g_type_interface_peek_parent (gpointer g_iface)
|
||||
return vtable;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_default_interface_ref:
|
||||
* @g_type: an interface type
|
||||
*
|
||||
* Increments the reference count for the interface type @g_type,
|
||||
* and returns the default interface vtable for the type.
|
||||
*
|
||||
* If the type is not currently in use, then the default vtable
|
||||
* for the type will be created and initalized by calling
|
||||
* the base interface init and default vtable init functions for
|
||||
* the type (the @<structfield>base_init</structfield>
|
||||
* and <structfield>class_init</structfield> members of #GTypeInfo).
|
||||
* Calling g_type_default_interface_ref() is useful when you
|
||||
* want to make sure that signals and properties for an interface
|
||||
* have been installed.
|
||||
*
|
||||
* Since: 2.4
|
||||
* Returns: the default vtable for the interface; call
|
||||
* g_type_default_interface_unref() when you are done using
|
||||
* the interface.
|
||||
*/
|
||||
gpointer
|
||||
g_type_default_interface_ref (GType g_type)
|
||||
{
|
||||
@ -2607,6 +2944,17 @@ g_type_default_interface_ref (GType g_type)
|
||||
return dflt_vtable;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_default_interface_peek:
|
||||
* @g_type: an interface type
|
||||
*
|
||||
* If the interface type @g_type is currently in use, returns
|
||||
* its default interface vtable.
|
||||
*
|
||||
* Since: 2.4
|
||||
* Returns: the default vtable for the interface, or %NULL
|
||||
* if the type is not currently in use.
|
||||
*/
|
||||
gpointer
|
||||
g_type_default_interface_peek (GType g_type)
|
||||
{
|
||||
@ -2624,6 +2972,20 @@ g_type_default_interface_peek (GType g_type)
|
||||
return vtable;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_default_interface_unref:
|
||||
* @g_iface: the default vtable structure for a interface, as
|
||||
* returned by g_type_default_interface_ref()
|
||||
*
|
||||
* Decrements the reference count for the type corresponding to the
|
||||
* interface default vtable @g_iface. If the type is dynamic, then
|
||||
* when no one is using the interface and all references have
|
||||
* been released, the finalize function for the interface's default
|
||||
* vtable (the <structfield>class_finalize</structfield> member of
|
||||
* #GTypeInfo) will be called.
|
||||
*
|
||||
* Since: 2.4
|
||||
*/
|
||||
void
|
||||
g_type_default_interface_unref (gpointer g_iface)
|
||||
{
|
||||
@ -2644,6 +3006,18 @@ g_type_default_interface_unref (gpointer g_iface)
|
||||
G_WRITE_UNLOCK (&type_rw_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_name:
|
||||
* @type: Type to return name for.
|
||||
*
|
||||
* Get the unique name that is assigned to a type ID.
|
||||
* Note that this function (like all other GType API) cannot cope with invalid
|
||||
* type IDs. %G_TYPE_INVALID may be passed to this function, as may be any other
|
||||
* validly registered type ID, but randomized type IDs should not be passed in and
|
||||
* will most likely lead to a crash.
|
||||
*
|
||||
* Returns: Static type name or %NULL.
|
||||
*/
|
||||
G_CONST_RETURN gchar*
|
||||
g_type_name (GType type)
|
||||
{
|
||||
@ -2656,6 +3030,14 @@ g_type_name (GType type)
|
||||
return node ? NODE_NAME (node) : NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_qname:
|
||||
* @type: Type to return quark of type name for.
|
||||
*
|
||||
* Get the corresponding quark of the type IDs name.
|
||||
*
|
||||
* Returns: The type names quark or 0.
|
||||
*/
|
||||
GQuark
|
||||
g_type_qname (GType type)
|
||||
{
|
||||
@ -2666,6 +3048,15 @@ g_type_qname (GType type)
|
||||
return node ? node->qname : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_from_name:
|
||||
* @name: Type name to lookup.
|
||||
*
|
||||
* Lookup the type ID from a given type name, returning 0 if no type has been registered under this name
|
||||
* (this is the preferred method to find out by name whether a specific type has been registered yet).
|
||||
*
|
||||
* Returns: Corresponding type ID or 0.
|
||||
*/
|
||||
GType
|
||||
g_type_from_name (const gchar *name)
|
||||
{
|
||||
@ -2685,6 +3076,15 @@ g_type_from_name (const gchar *name)
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_parent:
|
||||
* @type: The derived type.
|
||||
*
|
||||
* Return the direct parent type of the passed in type.
|
||||
* If the passed in type has no parent, i.e. is a fundamental type, 0 is returned.
|
||||
*
|
||||
* Returns: The parent type.
|
||||
*/
|
||||
GType
|
||||
g_type_parent (GType type)
|
||||
{
|
||||
@ -2695,6 +3095,15 @@ g_type_parent (GType type)
|
||||
return node ? NODE_PARENT_TYPE (node) : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_depth:
|
||||
* @type: A #GType value.
|
||||
*
|
||||
* Returns the length of the ancestry of the passed in type. This includes the
|
||||
* type itself, so that e.g. a fundamental type has depth 1.
|
||||
*
|
||||
* Returns: The depth of @type.
|
||||
*/
|
||||
guint
|
||||
g_type_depth (GType type)
|
||||
{
|
||||
@ -2705,6 +3114,20 @@ g_type_depth (GType type)
|
||||
return node ? node->n_supers + 1 : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_next_base:
|
||||
* @leaf_type: Descendant of @root_type and the type to be returned.
|
||||
* @root_type: Immediate parent of the returned type.
|
||||
*
|
||||
* Given a @leaf_type and a @root_type which is contained in its anchestry, return
|
||||
* the type that @root_type is the immediate parent of.
|
||||
* In other words, this function determines the type that is derived directly from
|
||||
* @root_type which is also a base class of @leaf_type. Given a root type and a
|
||||
* leaf type, this function can be used to determine the types and order in which
|
||||
* the leaf type is descended from the root type.
|
||||
*
|
||||
* Returns: Immediate child of @root_type and anchestor of @leaf_type.
|
||||
*/
|
||||
GType
|
||||
g_type_next_base (GType type,
|
||||
GType base_type)
|
||||
@ -2776,6 +3199,16 @@ type_node_conforms_to_U (TypeNode *node,
|
||||
return type_node_check_conformities_UorL (node, iface_node, support_interfaces, support_prerequisites, FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_is_a:
|
||||
* @type: Type to check anchestry for.
|
||||
* @is_a_type: Possible anchestor of @type or interface @type could conform to.
|
||||
*
|
||||
* If @is_a_type is a derivable type, check whether @type is a descendant of @is_a_type.
|
||||
* If @is_a_type is an interface, check whether @type conforms to it.
|
||||
*
|
||||
* Returns: %TRUE if @type is_a @is_a_type holds true.
|
||||
*/
|
||||
gboolean
|
||||
g_type_is_a (GType type,
|
||||
GType iface_type)
|
||||
@ -2790,7 +3223,17 @@ g_type_is_a (GType type,
|
||||
return is_a;
|
||||
}
|
||||
|
||||
GType* /* free result */
|
||||
/**
|
||||
* g_type_children:
|
||||
* @type: The parent type.
|
||||
* @n_children: Optional #guint pointer to contain the number of child types.
|
||||
*
|
||||
* Return a newly allocated and 0-terminated array of type IDs, listing the
|
||||
* child types of @type. The return value has to be g_free()ed after use.
|
||||
*
|
||||
* Returns: Newly allocated and 0-terminated array of child types.
|
||||
*/
|
||||
GType*
|
||||
g_type_children (GType type,
|
||||
guint *n_children)
|
||||
{
|
||||
@ -2821,7 +3264,18 @@ g_type_children (GType type,
|
||||
}
|
||||
}
|
||||
|
||||
GType* /* free result */
|
||||
/**
|
||||
* g_type_interfaces:
|
||||
* @type: The type to list interface types for.
|
||||
* @n_interfaces: Optional #guint pointer to contain the number of interface types.
|
||||
*
|
||||
* Return a newly allocated and 0-terminated array of type IDs, listing the
|
||||
* interface types that @type conforms to. The return value has to be
|
||||
* g_free()ed after use.
|
||||
*
|
||||
* Returns: Newly allocated and 0-terminated array of interface types.
|
||||
*/
|
||||
GType*
|
||||
g_type_interfaces (GType type,
|
||||
guint *n_interfaces)
|
||||
{
|
||||
@ -2899,6 +3353,16 @@ type_get_qdata_L (TypeNode *node,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_get_qdata:
|
||||
* @type: a #GType
|
||||
* @quark: a #GQuark id to identify the data
|
||||
*
|
||||
* Obtains data which has previously been attached to @type
|
||||
* with g_type_set_qdata().
|
||||
*
|
||||
* Returns: the data, or %NULL if no data was found
|
||||
*/
|
||||
gpointer
|
||||
g_type_get_qdata (GType type,
|
||||
GQuark quark)
|
||||
@ -2956,6 +3420,14 @@ type_set_qdata_W (TypeNode *node,
|
||||
qdata[i].data = data;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_set_qdata:
|
||||
* @type: a #GType
|
||||
* @quark: a #GQuark id to identify the data
|
||||
* @data: the data
|
||||
*
|
||||
* Attaches arbitrary data to a type.
|
||||
*/
|
||||
void
|
||||
g_type_set_qdata (GType type,
|
||||
GQuark quark,
|
||||
@ -2992,6 +3464,18 @@ type_add_flags_W (TypeNode *node,
|
||||
type_set_qdata_W (node, static_quark_type_flags, GUINT_TO_POINTER (dflags));
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_query:
|
||||
* @type: the #GType value of a static, classed type.
|
||||
* @query: A user provided structure that is filled in with constant values
|
||||
* upon success.
|
||||
*
|
||||
* Queries the type system for information about a specific type.
|
||||
* This function will fill in a user-provided structure to hold type-specific
|
||||
* information. If an invalid #GType is passed in, the @type member of the
|
||||
* #GTypeQuery is 0. All members filled into the #GTypeQuery structure should
|
||||
* be considered constant and have to be left untouched.
|
||||
*/
|
||||
void
|
||||
g_type_query (GType type,
|
||||
GTypeQuery *query)
|
||||
@ -3057,6 +3541,16 @@ g_type_test_flags (GType type,
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_get_plugin:
|
||||
* @type: The #GType to retrieve the plugin for.
|
||||
*
|
||||
* Returns the #GTypePlugin structure for @type or
|
||||
* %NULL if @type does not have a #GTypePlugin structure.
|
||||
*
|
||||
* Returns: The corresponding plugin if @type is a dynamic type,
|
||||
* %NULL otherwise.
|
||||
*/
|
||||
GTypePlugin*
|
||||
g_type_get_plugin (GType type)
|
||||
{
|
||||
@ -3067,6 +3561,19 @@ g_type_get_plugin (GType type)
|
||||
return node ? node->plugin : NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_interface_get_plugin:
|
||||
* @instance_type: the #GType value of an instantiatable type.
|
||||
* @interface_type: the #GType value of an interface type.
|
||||
*
|
||||
* Returns the #GTypePlugin structure for the dynamic interface
|
||||
* @interface_type which has been added to @instance_type, or
|
||||
* %NULL if @interface_type has not been added to @instance_type or does
|
||||
* not have a #GTypePlugin structure. See g_type_add_interface_dynamic().
|
||||
*
|
||||
* Returns: the #GTypePlugin for the dynamic interface @interface_type
|
||||
* of @instance_type.
|
||||
*/
|
||||
GTypePlugin*
|
||||
g_type_interface_get_plugin (GType instance_type,
|
||||
GType interface_type)
|
||||
@ -3103,6 +3610,17 @@ g_type_interface_get_plugin (GType instance_type,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_fundamental_next:
|
||||
*
|
||||
* Returns the next free fundamental type id which can be used to
|
||||
* register a new fundamental type with g_type_register_fundamental().
|
||||
* The returned type ID represents the highest currently registered
|
||||
* fundamental type identifier.
|
||||
*
|
||||
* Returns: The nextmost fundamental type ID to be registered,
|
||||
* or 0 if the type system ran out of fundamental type IDs.
|
||||
*/
|
||||
GType
|
||||
g_type_fundamental_next (void)
|
||||
{
|
||||
@ -3115,6 +3633,15 @@ g_type_fundamental_next (void)
|
||||
return type <= G_TYPE_FUNDAMENTAL_MAX ? type : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_fundamental:
|
||||
* @type_id: valid type ID
|
||||
*
|
||||
* Internal function, used to extract the fundamental type ID portion.
|
||||
* use G_TYPE_FUNDAMENTAL() instead.
|
||||
*
|
||||
* Returns: fundamental type ID
|
||||
*/
|
||||
GType
|
||||
g_type_fundamental (GType type_id)
|
||||
{
|
||||
@ -3310,6 +3837,18 @@ g_type_check_value_holds (GValue *value,
|
||||
return value && type_check_is_value_type_U (value->g_type) && g_type_is_a (value->g_type, type);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_value_table_peek:
|
||||
* @type: A #GType value.
|
||||
*
|
||||
* Returns the location of the #GTypeValueTable associated with @type.
|
||||
* <emphasis>Note that this function should only be used from source code
|
||||
* that implements or has internal knowledge of the implementation of
|
||||
* @type.</emphasis>
|
||||
*
|
||||
* Returns: Location of the #GTypeValueTable associated with @type or
|
||||
* %NULL if there is no #GTypeValueTable associated with @type.
|
||||
*/
|
||||
GTypeValueTable*
|
||||
g_type_value_table_peek (GType type)
|
||||
{
|
||||
@ -3387,6 +3926,12 @@ g_type_name_from_class (GTypeClass *g_class)
|
||||
|
||||
|
||||
/* --- initialization --- */
|
||||
/**
|
||||
* g_type_init_with_debug_flags:
|
||||
* @debug_flags: Bitwise combination of #GTypeDebugFlags values for debugging purposes.
|
||||
*
|
||||
* Similar to g_type_init(), but additionally sets debug flags.
|
||||
*/
|
||||
void
|
||||
g_type_init_with_debug_flags (GTypeDebugFlags debug_flags)
|
||||
{
|
||||
@ -3492,12 +4037,63 @@ g_type_init_with_debug_flags (GTypeDebugFlags debug_flags)
|
||||
G_UNLOCK (type_init_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_init:
|
||||
*
|
||||
* Prior to any use of the type system, g_type_init() has to be called to initialize
|
||||
* the type system and assorted other code portions (such as the various fundamental
|
||||
* type implementations or the signal system).
|
||||
*/
|
||||
void
|
||||
g_type_init (void)
|
||||
{
|
||||
g_type_init_with_debug_flags (0);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_type_class_add_private:
|
||||
* @g_class: class structure for an instantiatable type
|
||||
* @private_size: size of private structure.
|
||||
*
|
||||
* Registers a private structure for an instantiatable type;
|
||||
* when an object is allocated, the private structures for
|
||||
* the type and all of its parent types are allocated
|
||||
* sequentially in the same memory block as the public
|
||||
* structures. This function should be called in the
|
||||
* type's class_init() function. The private structure can
|
||||
* be retrieved using the G_TYPE_INSTANCE_GET_PRIVATE() macro.
|
||||
* The following example shows attaching a private structure
|
||||
* <structname>MyObjectPrivate</structname> to an object
|
||||
* <structname>MyObject</structname> defined in the standard GObject
|
||||
* fashion.
|
||||
*
|
||||
* |[
|
||||
* typedef struct _MyObjectPrivate MyObjectPrivate;
|
||||
*
|
||||
* struct _MyObjectPrivate {
|
||||
* int some_field;
|
||||
* };
|
||||
*
|
||||
* #define MY_OBJECT_GET_PRIVATE(o) \
|
||||
* (G_TYPE_INSTANCE_GET_PRIVATE ((o), MY_TYPE_OBJECT, MyObjectPrivate))
|
||||
*
|
||||
* static void
|
||||
* my_object_class_init (MyObjectClass *klass)
|
||||
* {
|
||||
* g_type_class_add_private (klass, sizeof (MyObjectPrivate));
|
||||
* }
|
||||
*
|
||||
* static int
|
||||
* my_object_get_some_field (MyObject *my_object)
|
||||
* {
|
||||
* MyObjectPrivate *priv = MY_OBJECT_GET_PRIVATE (my_object);
|
||||
*
|
||||
* return priv->some_field;
|
||||
* }
|
||||
* ]|
|
||||
*
|
||||
* Since: 2.4
|
||||
*/
|
||||
void
|
||||
g_type_class_add_private (gpointer g_class,
|
||||
gsize private_size)
|
||||
|
1042
gobject/gtype.h
1042
gobject/gtype.h
File diff suppressed because it is too large
Load Diff
@ -43,6 +43,11 @@ G_BEGIN_DECLS
|
||||
#define G_VALUE_HOLDS_DOUBLE(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_DOUBLE))
|
||||
#define G_VALUE_HOLDS_STRING(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_STRING))
|
||||
#define G_VALUE_HOLDS_POINTER(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_POINTER))
|
||||
/**
|
||||
* G_TYPE_GTYPE:
|
||||
*
|
||||
* The type for #GType.
|
||||
*/
|
||||
#define G_TYPE_GTYPE (g_gtype_get_type())
|
||||
#define G_VALUE_HOLDS_GTYPE(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_GTYPE))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user