GTypePlugin
GTypePlugin — Интерфейс для динамически загружаемых типов
Краткое описание
#include <glib-object.h>
GTypePlugin;
GTypePluginClass;
void (*GTypePluginUse) (GTypePlugin *plugin);
void (*GTypePluginUnuse) (GTypePlugin *plugin);
void (*GTypePluginCompleteTypeInfo) (GTypePlugin *plugin,
GType g_type,
GTypeInfo *info,
GTypeValueTable *value_table);
void (*GTypePluginCompleteInterfaceInfo) (GTypePlugin *plugin,
GType instance_type,
GType interface_type,
GInterfaceInfo *info);
void g_type_plugin_use (GTypePlugin *plugin);
void g_type_plugin_unuse (GTypePlugin *plugin);
void g_type_plugin_complete_type_info (GTypePlugin *plugin,
GType g_type,
GTypeInfo *info,
GTypeValueTable *value_table);
void g_type_plugin_complete_interface_info
(GTypePlugin *plugin,
GType instance_type,
GType interface_type,
GInterfaceInfo *info);
Иерархия объектов
Известные реализации
GTypePlugin реализует GTypeModule.
Описание
Система типов GObject поддерживает динамическую загрузку типов. Интерфейс GTypePlugin используется для обработки жизненного цикла динамически загружаемых типов. Это происходит следующим образом:
Сначала тип внедряется (обычно после загрузки модуля в первый раз, или вашим основным приложением, которое знает какие модули внедряют какие типы), например:
new_type_id = g_type_register_dynamic (parent_type_id, "TypeName", new_type_plugin, type_flags);гдеnew_type_pluginэто реализация интерфейсаGTypePlugin.На реализованный тип создаётся ссылка, например через
g_type_class_ref()или черезg_type_create_instance()(вызывается функциейg_object_new()) или как описано выше выполняя наследование типа изnew_type_id.Это заставит систему типов загрузить реализацию типа вызвав
g_type_plugin_use()иg_type_plugin_complete_type_info()дляnew_type_plugin.В некоторой точке реализация типа больше не требуется, например после
g_type_class_unref()илиg_type_free_instance()(вызывается когда количество ссылок экземпляра сброшено до нуля).Это заставит систему типов сбросить информацию найденную с помощью
g_type_plugin_complete_type_info()и зтем вызватьg_type_plugin_unuse()дляnew_type_plugin.Цикл может повторятся от второго шага.
В основном вы должны реализовать GTypePlugin тип который несёт use_count, как только use_count станет единицей, вы должны загрузить реализацию для успешной обработки наступающего вызова g_type_plugin_complete_type_info(). Позже, возможно после последующих использованных/неиспользованных вызовов, как только use_count сброшен до 0, вы можете выгрузить реализацию снова. Система типов гарантированно вызовет g_type_plugin_use() и g_type_plugin_complete_type_info() снова когда тип потребуется опять.
GTypeModule это реализация GTypePlugin в которой уже реализованы большинство необходимого для фактической загрузки или выгрузки модуля. Это даже обрабатывает многократную регистрацию типов в модуле.
Детали
GTypePlugin
Декларация типа GTypePlugin используется как метка для объектов которые реализуют интерфейс GTypePlugin.
GTypePluginClass
Интерфейс GTypePlugin используется системой типов для обработки жизненного цикла динамически загружаемых типов.
GTypePluginUse use_plugin;
Увеличивает количество используемых plugin.
GTypePluginUnuse unuse_plugin;
Уменьшает количество используемых plugin.
GTypePluginCompleteTypeInfo complete_type_info;
Заполняет сструктуры GTypeInfo и GTypeValueTable для типа. Сструктуры инициализируются с помощью memset(s, 0, sizeof (s)) перед вызовом этой функции.
GTypePluginCompleteInterfaceInfo complete_interface_info;
Заполняет недостающие части GInterfaceInfo для интерфейса. Сструктуры инициализируются с помощью memset(s, 0, sizeof (s)) перед вызовом этой функции.
GTypePluginUse ()
Тип use_plugin функции GTypePluginClass, которая вызывается для увеличения используемого количества plugin.
plugin :
GTypePlugin чьё используемое количество должно быть увеличено
GTypePluginUnuse ()
Тип unuse_plugin функции GTypePluginClass.
plugin :
GTypePlugin чьё используемое количество должно быть уменьшено
GTypePluginCompleteTypeInfo ()
Тип complete_type_info функции GTypePluginClass.
plugin :
g_type :
GType чья информация заполнена
info :
GTypeInfo структура для заполнения
value_table :
GTypeValueTable для заполнения
GTypePluginCompleteInterfaceInfo ()
Тип complete_interface_info функции GTypePluginClass.
plugin :
instance_type :
GType инстанциируемого типа к которому добавляется интерфейс
interface_type :
GType интерфейса чья информация заполнена
info :
GInterfaceInfo для заполнения
g_type_plugin_use ()
Вызывает use_plugin функцию из GTypePluginClass принадлежащей plugin. Нет необходимости использовать эту функцию вне системы типов GObject непосредственно.
plugin :
g_type_plugin_unuse ()
Вызывает unuse_plugin функцию из GTypePluginClass принадлежащей plugin. Нет необходимости использовать эту функцию вне системы типов GObject непосредственно.
plugin :
g_type_plugin_complete_type_info ()
Вызывает complete_type_info функцию из GTypePluginClass принадлежащей plugin. Нет необходимости использовать эту функцию вне системы типов GObject непосредственно.
plugin :
g_type :
GType чья информация заполняется
info :
GTypeInfo структура для заполнения
value_table :
GTypeValueTable для заполнения
g_type_plugin_complete_interface_info ()
Вызывает complete_interface_info функцию из GTypePluginClass принадлежащей plugin. Нет необходимости использовать эту функцию вне системы типов GObject непосредственно.
plugin :
instance_type :
GType инстанциируемого типа к которому добавляется интерфейс
interface_type :
GType интерфейса чья информация заполняется
info :
GInterfaceInfo для заполнения
Смотрите также
Last updated
Was this helpful?