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 используется для обработки жизненного цикла динамически загружаемых типов. Это происходит следующим образом:

  1. Сначала тип внедряется (обычно после загрузки модуля в первый раз, или вашим основным приложением, которое знает какие модули внедряют какие типы), например:new_type_id = g_type_register_dynamic (parent_type_id, "TypeName", new_type_plugin, type_flags); где new_type_plugin это реализация интерфейсаGTypePlugin.

  2. На реализованный тип создаётся ссылка, например через g_type_class_ref() или через g_type_create_instance() (вызывается функцией g_object_new()) или как описано выше выполняя наследование типа из new_type_id.

  3. Это заставит систему типов загрузить реализацию типа вызвав g_type_plugin_use() и g_type_plugin_complete_type_info() для new_type_plugin.

  4. В некоторой точке реализация типа больше не требуется, например после g_type_class_unref() или g_type_free_instance() (вызывается когда количество ссылок экземпляра сброшено до нуля).

  5. Это заставит систему типов сбросить информацию найденную с помощью g_type_plugin_complete_type_info() и зтем вызвать g_type_plugin_unuse() дляnew_type_plugin.

  6. Цикл может повторятся от второго шага.

В основном вы должны реализовать 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 для заполнения

Смотрите также

GTypeModule и g_type_register_dynamic().

Last updated

Was this helpful?