Type

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.

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.

Type instance and class structs are limited to a total of 64 KiB, including all parent types. Similarly, type instances' private data (as created by g_type_class_add_private()) are limited to a total of 64 KiB. If a type instance needs a large static buffer, allocate it separately (typically by using GArray or GPtrArray) and put a pointer to the buffer in the structure.

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 '-_+'.

class Type {}

Members

Static functions

addClassCacheFunc
void addClassCacheFunc(void* cacheData, GTypeClassCacheFunc cacheFunc)

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.

addClassPrivate
void addClassPrivate(GType classType, gsize privateSize)

Registers a private class structure for a classed type; when the class is allocated, the private structures for the class 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 get_type() function after the type is registered. The private structure can be retrieved using the G_TYPE_CLASS_GET_PRIVATE() macro. Since 2.24

addInterfaceCheck
void addInterfaceCheck(void* checkData, GTypeInterfaceCheckFunc checkFunc)

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

addInterfaceDynamic
void addInterfaceDynamic(GType instanceType, GType interfaceType, TypePlugin plugin)

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.

addInterfaceStatic
void addInterfaceStatic(GType instanceType, GType interfaceType, GInterfaceInfo* info)

Adds the static interface_type to instantiable_type. The information contained in the GInterfaceInfo structure pointed to by info is used to manage the relationship.

children
GType[] children(GType type)

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.

classAddPrivate
void classAddPrivate(void* gClass, gsize privateSize)

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. Note that the accumulated size of the private structures of a type and all its parent types cannot exceed 64 KiB. 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 MyObjectPrivate to an object MyObject defined in the standard GObject fashion. type's class_init() function. Note the use of a structure member "priv" to avoid the overhead of repeatedly calling MY_OBJECT_GET_PRIVATE(). Since 2.4

classPeek
void* classPeek(GType 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).

classPeekParent
void* classPeekParent(void* gClass)

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

classPeekStatic
void* classPeekStatic(GType type)

A more efficient version of g_type_class_peek() which works only for static types. Since 2.4

classRef
void* classRef(GType 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.

classUnref
void classUnref(void* gClass)

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.

classUnrefUncached
void classUnrefUncached(void* gClass)

A variant of g_type_class_unref() for use in GTypeClassCacheFunc implementations. It unreferences a class without consulting the chain of GTypeClassCacheFuncs, avoiding the recursion which would occur otherwise.

createInstance
GTypeInstance* createInstance(GType type)

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 never directly through g_type_create_instance() which doesn't handle things like singleton objects or object construction. Note: Do not use this function, unless you're implementing a fundamental type. Also language bindings should not use this function but g_object_new() instead.

defaultInterfacePeek
void* defaultInterfacePeek(GType gType)

If the interface type g_type is currently in use, returns its default interface vtable. Since 2.4

defaultInterfaceRef
void* defaultInterfaceRef(GType gType)

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 @base_init and class_init 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

defaultInterfaceUnref
void defaultInterfaceUnref(void* gIface)

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 class_finalize member of GTypeInfo) will be called. Since 2.4

depth
uint depth(GType type)

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.

ensure
void ensure(GType type)

Ensures that the indicated type has been registered with the type system, and its _class_init() method has been run. In theory, simply calling the type's _get_type() method (or using the corresponding macro) is supposed take care of this. However, _get_type() methods are often marked G_GNUC_CONST for performance reasons, even though this is technically incorrect (since G_GNUC_CONST requires that the function not have side effects, which _get_type() methods do on the first call). As a result, if you write a bare call to a _get_type() macro, it may get optimized out by the compiler. Using g_type_ensure() guarantees that the type's _get_type() method is called. Since 2.34

freeInstance
void freeInstance(GTypeInstance* instanc)

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.

fromName
GType fromName(string name)

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).

fundamental
GType fundamental(GType typeId)

Internal function, used to extract the fundamental type ID portion. use G_TYPE_FUNDAMENTAL() instead.

fundamentalNext
GType fundamentalNext()

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.

getInstanceClass
T* getInstanceClass(ObjectG obj)
Undocumented in source. Be warned that the author may not have intended to support it.
getPlugin
TypePlugin getPlugin(GType type)

Returns the GTypePlugin structure for type or NULL if type does not have a GTypePlugin structure.

getQdata
void* getQdata(GType type, GQuark quark)

Obtains data which has previously been attached to type with g_type_set_qdata(). Note that this does not take subtyping into account; data attached to one type with g_type_set_qdata() cannot be retrieved from a subtype using g_type_get_qdata().

getTypeRegistrationSerial
uint getTypeRegistrationSerial()

Returns an opaque serial number that represents the state of the set of registered types. Any time a type is registered this serial changes, which means you can cache information based on type lookups (such as g_type_from_name()) and know if the cache is still valid at a later time by comparing the current serial with the one at the type lookup. Since 2.36

init
void init()

Warning g_type_init has been deprecated since version 2.36 and should not be used in newly-written code. the type system is now initialised automatically This function used to initialise the type system. Since GLib 2.36, the type system is initialised automatically and this function does nothing.

initWithDebugFlags
void initWithDebugFlags(GTypeDebugFlags debugFlags)

Warning g_type_init_with_debug_flags has been deprecated since version 2.36 and should not be used in newly-written code. the type system is now initialised automatically This function used to initialise the type system with debugging flags. Since GLib 2.36, the type system is initialised automatically and this function does nothing. If you need to enable debugging features, use the GOBJECT_DEBUG environment variable.

interfaceAddPrerequisite
void interfaceAddPrerequisite(GType interfaceType, GType prerequisiteType)

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.

interfaceGetPlugin
TypePlugin interfaceGetPlugin(GType instanceType, GType interfaceType)

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().

interfacePeek
void* interfacePeek(void* instanceClass, GType ifaceType)

Returns the GTypeInterface structure of an interface to which the passed in class conforms.

interfacePeekParent
void* interfacePeekParent(void* gIface)

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.

interfacePrerequisites
GType[] interfacePrerequisites(GType interfaceType)

Returns the prerequisites of an interfaces type. Since 2.2

interfaces
GType[] interfaces(GType type)

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.

isA
int isA(GType type, GType isAType)

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.

name
string name(ObjectG obj)

Get the unique name that is assigned to the Objects type.

name
string name(GType type)

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.

nextBase
GType nextBase(GType leafType, GType rootType)

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.

parent
GType parent(GType 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.

qname
GQuark qname(GType type)

Get the corresponding quark of the type IDs name.

query
void query(GType type, GTypeQuery query)

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.

registerDynamic
GType registerDynamic(GType parentType, string typeName, TypePlugin plugin, GTypeFlags flags)

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.

registerFundamental
GType registerFundamental(GType typeId, string typeName, GTypeInfo* info, GTypeFundamentalInfo* finfo, GTypeFlags flags)

Registers type_id as the predefined identifier and type_name as the name of a fundamental type. If type_id is already registered, or a type named type_name is already registered, the behaviour is undefined. 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.

registerStatic
GType registerStatic(GType parentType, string typeName, GTypeInfo* info, GTypeFlags flags)

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.

registerStaticSimple
GType registerStaticSimple(GType parentType, string typeName, uint classSize, GClassInitFunc classInit, uint instanceSize, GInstanceInitFunc instanceInit, GTypeFlags flags)

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

removeClassCacheFunc
void removeClassCacheFunc(void* cacheData, GTypeClassCacheFunc cacheFunc)

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.

removeInterfaceCheck
void removeInterfaceCheck(void* checkData, GTypeInterfaceCheckFunc checkFunc)

Removes an interface check function added with g_type_add_interface_check(). Since 2.4

setQdata
void setQdata(GType type, GQuark quark, void* data)

Attaches arbitrary data to a type.

valueTablePeek
GTypeValueTable* valueTablePeek(GType type)

Returns the location of the GTypeValueTable associated with type. Note that this function should only be used from source code that implements or has internal knowledge of the implementation of type.

Meta