The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

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

Иерархия объектов


  GInterface
   +----GTypePlugin

Известные реализации

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

typedef struct _GTypePlugin GTypePlugin;

Декларация типа GTypePlugin используется как метка для объектов которые реализуют интерфейс GTypePlugin.


GTypePluginClass

typedef struct {
  GTypePluginUse		   use_plugin;
  GTypePluginUnuse		   unuse_plugin;
  GTypePluginCompleteTypeInfo	   complete_type_info;
  GTypePluginCompleteInterfaceInfo complete_interface_info;
} 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 ()

void                (*GTypePluginUse)                   (GTypePlugin *plugin);

Тип use_plugin функции GTypePluginClass, которая вызывается для увеличения используемого количества plugin.

plugin : GTypePlugin чьё используемое количество должно быть увеличено

GTypePluginUnuse ()

void                (*GTypePluginUnuse)                 (GTypePlugin *plugin);

Тип unuse_plugin функции GTypePluginClass.

plugin : GTypePlugin чьё используемое количество должно быть уменьшено

GTypePluginCompleteTypeInfo ()

void                (*GTypePluginCompleteTypeInfo)      (GTypePlugin *plugin,
                                                         GType g_type,
                                                         GTypeInfo *info,
                                                         GTypeValueTable *value_table);

Тип complete_type_info функции GTypePluginClass.

plugin : GTypePlugin
g_type : GType чья информация заполнена
info : GTypeInfo структура для заполнения
value_table : GTypeValueTable для заполнения

GTypePluginCompleteInterfaceInfo ()

void                (*GTypePluginCompleteInterfaceInfo) (GTypePlugin *plugin,
                                                         GType instance_type,
                                                         GType interface_type,
                                                         GInterfaceInfo *info);

Тип complete_interface_info функции GTypePluginClass.

plugin : GTypePlugin
instance_type : GType инстанциируемого типа к которому добавляется интерфейс
interface_type : GType интерфейса чья информация заполнена
info : GInterfaceInfo для заполнения

g_type_plugin_use ()

void                g_type_plugin_use                   (GTypePlugin *plugin);

Вызывает use_plugin функцию из GTypePluginClass принадлежащей plugin. Нет необходимости использовать эту функцию вне системы типов GObject непосредственно.

plugin : GTypePlugin

g_type_plugin_unuse ()

void                g_type_plugin_unuse                 (GTypePlugin *plugin);

Вызывает unuse_plugin функцию из GTypePluginClass принадлежащей plugin. Нет необходимости использовать эту функцию вне системы типов GObject непосредственно.

plugin : a GTypePlugin

g_type_plugin_complete_type_info ()

void                g_type_plugin_complete_type_info    (GTypePlugin *plugin,
                                                         GType g_type,
                                                         GTypeInfo *info,
                                                         GTypeValueTable *value_table);

Вызывает complete_type_info функцию из GTypePluginClass принадлежащей plugin. Нет необходимости использовать эту функцию вне системы типов GObject непосредственно.

plugin : GTypePlugin
g_type : GType чья информация заполняется
info : GTypeInfo структура для заполнения
value_table : GTypeValueTable для заполнения

g_type_plugin_complete_interface_info ()

void                g_type_plugin_complete_interface_info
                                                        (GTypePlugin *plugin,
                                                         GType instance_type,
                                                         GType interface_type,
                                                         GInterfaceInfo *info);

Вызывает complete_interface_info функцию из GTypePluginClass принадлежащей plugin. Нет необходимости использовать эту функцию вне системы типов GObject непосредственно.

plugin : GTypePlugin
instance_type : GType инстанциируемого типа к которому добавляется интерфейс
interface_type : GType интерфейса чья информация заполняется
info : GInterfaceInfo для заполнения

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

GTypeModule и g_type_register_dynamic().




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру