Interface TypePlugin
- All Superinterfaces:
Proxy
- All Known Implementing Classes:
IOModule,TypeModule,TypeModule.TypeModule$Impl,TypePlugin.TypePlugin$Impl
The GObject type system supports dynamic loading of types. It goes as follows:
1. The type is initially introduced (usually upon loading the module the first time, or by your main application that knows what modules introduces what types), like this:
new_type_id = g_type_register_dynamic (parent_type_id,
"TypeName",
new_type_plugin,
type_flags);
where new_type_plugin is an implementation of the
GTypePlugin interface.
2. The type's implementation is referenced, e.g. through
TypeClass.ref(org.gnome.glib.Type) or through GObjects.typeCreateInstance(org.gnome.glib.Type)
(this is being called by GObject()) or through one of the above
done on a type derived from new_type_id.
3. This causes the type system to load the type's implementation by calling
use() and completeTypeInfo(org.gnome.glib.Type, org.gnome.gobject.TypeInfo, org.gnome.gobject.TypeValueTable)
on new_type_plugin.
4. At some point the type's implementation isn't required anymore, e.g. after
TypeClass.unref() or GObjects.typeFreeInstance(org.gnome.gobject.TypeInstance)
(called when the reference count of an instance drops to zero).
5. This causes the type system to throw away the information retrieved
from completeTypeInfo(org.gnome.glib.Type, org.gnome.gobject.TypeInfo, org.gnome.gobject.TypeValueTable) and then it calls
unuse() on new_type_plugin.
6. Things may repeat from the second step.
So basically, you need to implement a GTypePlugin type that
carries a use_count, once use_count goes from zero to one, you need
to load the implementation to successfully handle the upcoming
completeTypeInfo(org.gnome.glib.Type, org.gnome.gobject.TypeInfo, org.gnome.gobject.TypeValueTable) call. Later, maybe after
succeeding use/unuse calls, once use_count drops to zero, you can
unload the implementation again. The type system makes sure to call
use() and completeTypeInfo(org.gnome.glib.Type, org.gnome.gobject.TypeInfo, org.gnome.gobject.TypeValueTable)
again when the type is needed again.
TypeModule is an implementation of GTypePlugin that
already implements most of this except for the actual module loading and
unloading. It even handles multiple registered types per module.
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic classThe TypePlugin$Impl type represents a native instance of the TypePlugin interface. -
Method Summary
Modifier and TypeMethodDescriptiondefault voidcompleteInterfaceInfo(Type instanceType, Type interfaceType, InterfaceInfo info) Calls thecompleteInterfaceInfofunction from theGTypePluginClassofplugin.There should be no need to use this function outside of the GObject type system itself.default voidcompleteTypeInfo(Type gType, TypeInfo info, TypeValueTable valueTable) Calls thecompleteTypeInfofunction from theGTypePluginClassofplugin.There should be no need to use this function outside of the GObject type system itself.static @Nullable TypegetType()Get the GType of the TypePlugin classdefault voidunuse()Calls theunusePluginfunction from theGTypePluginClassofplugin.There should be no need to use this function outside of the GObject type system itself.default voiduse()Calls theusePluginfunction from theGTypePluginClassofplugin.There should be no need to use this function outside of the GObject type system itself.
-
Method Details
-
getType
-
completeInterfaceInfo
Calls thecompleteInterfaceInfofunction from theGTypePluginClassofplugin.There should be no need to use this function outside of the GObject type system itself.- Parameters:
instanceType- theGTypeof an instantiatable type to which the interface is addedinterfaceType- theGTypeof the interface whose info is completedinfo- theGInterfaceInfoto fill in
-
completeTypeInfo
Calls thecompleteTypeInfofunction from theGTypePluginClassofplugin.There should be no need to use this function outside of the GObject type system itself.- Parameters:
gType- theGTypewhose info is completedinfo- theGTypeInfostruct to fill invalueTable- theGTypeValueTableto fill in
-
unuse
default void unuse()Calls theunusePluginfunction from theGTypePluginClassofplugin.There should be no need to use this function outside of the GObject type system itself. -
use
default void use()Calls theusePluginfunction from theGTypePluginClassofplugin.There should be no need to use this function outside of the GObject type system itself.
-