GTypeModule

GTypeModule — Тип загружаемых модулей

Краткое описание


#include <glib-object.h>


                    GTypeModule;
                    GTypeModuleClass;
gboolean            g_type_module_use                   (GTypeModule *module);
void                g_type_module_unuse                 (GTypeModule *module);
void                g_type_module_set_name              (GTypeModule *module,
                                                         const gchar *name);
GType               g_type_module_register_type         (GTypeModule *module,
                                                         GType parent_type,
                                                         const gchar *type_name,
                                                         const GTypeInfo *type_info,
                                                         GTypeFlags flags);
void                g_type_module_add_interface         (GTypeModule *module,
                                                         GType instance_type,
                                                         GType interface_type,
                                                         const GInterfaceInfo *interface_info);
GType               g_type_module_register_enum         (GTypeModule *module,
                                                         const gchar *name,
                                                         const GEnumValue *const _static_values);
GType               g_type_module_register_flags        (GTypeModule *module,
                                                         const gchar *name,
                                                         const GFlagsValue *const _static_values);
#define             G_DEFINE_DYNAMIC_TYPE               (TN, t_n, T_P)
#define             G_DEFINE_DYNAMIC_TYPE_EXTENDED      (TypeName, type_name, TYPE_PARENT, flags, CODE)

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

Реализуемые интерфейсы

GTypeModule реализует GTypePlugin.

Описание

GTypeModule обеспечивает простую реализацию интерфейса GTypePlugin. Моделью GTypeModule является динамически загружаемый модуль который реализует некоторое количество реализаций типов и интерфейсов. Когда модуль загружен, происходит регистрация его типов и интерфейсов используя g_type_module_register_type() иg_type_module_add_interface(). Пока экземпляры этих типов и интерфейсов используются, модуль остаётся загруженным. Когда типы и интерфейсы больше не нужны, модуль может быть выгружен. Если типы и интерфейсы потребовались снова, модуль перезагружается. Помните что последний сброс ссылки не может произойти в коде модуля, так как это привело бы к выгрузке кода вызываемой программой прежде чем g_object_unref() вернёт значение.

Отслеживание загружен модуль или нет выполняется счётчиком использования - начиная с нуля, всегда когда счётчик больше нуля, модуль загружен. Счётчик использования внутренне поддерживается системой типов, но так же может явно контролироваться с помощью g_type_module_use() и g_type_module_unuse(). Обычно когда загружается модуль для первого типа, g_type_module_use() будет использована чтобы при загрузке могли инициализироваться его типы. Немного позже, когда модуль больше не должен быть загружен кроме как для реализации типа который содержит, вызывается g_type_module_unuse().

GTypeModule фактически не обеспечивает ни загрузки ни выгрузки модуля. Для создания специфичного модуля вы должны унаследовать GTypeModule и реализовать загрузку и выгрузку функций в GTypeModuleClass.

Детали

GTypeModule

Члены сструктуры GTypeModule не имеют непосредственного доступа, исключая поле name.

gchar *name;

имя модуля

GTypeModuleClass

Для осуществления динамической загрузки типов основанных на GTypeModule, функции load и unload должны быть реализованы в GTypeModuleClass.

GObjectClass parent_class;

родительский класс

load ()

загружает модуль и регистрирует один тип или больше используя g_type_module_register_type().

unload ()

выгружает модуль

g_type_module_use ()

Увеличивает количество использований GTypeModule на единицу. Если количество использований перед этим было 0, модуль будет загружен.

module :

Возвращает :

FALSE если необходимая загрузка модуля неудалась.

g_type_module_unuse ()

Уменьшает количество использований GTypeModule на единицу. Если результатом уменьшения будет 0, модуль выгружается. (Однако, GTypeModule не будет освобождена, а регистрация типов связанных с GTypeModule не отменяется. Как только GTypeModule инициализирована, она будет существовать всегда).

module :

g_type_module_set_name ()

Устанавливает имя для GTypeModule

module :

name :

Удобное для чтения имя используемое в сообщениях об ошибках.

g_type_module_register_type ()

Находит или регистрирует тип который реализуется специфичным типовым модулем. Если тип с именем type_name был предварительно зарегистрирован, возвращается GTypeидентифицирующий тип, иначе тип вновь регистрируется и возвращается результирующий GType идентификатор.

Когда перерегистрируется тип (обычно потому что модуль выгружен а зтем загружен снова, и переинициализирован), module и parent_type должны быть такими же как предыдущие.

Пока любые экземпляры типа существуют, модуль типа не будет выгружен.

module :

parent_type :

тип для родительского класса

type_name :

имя для типа

type_info :

структура типовой информации

flags :

поле флажков обеспечивающих детали о типе

Возвращает :

новый или существующий ID типа

g_type_module_add_interface ()

Регистрирует дополнительный интерфейс для типа, у которого уже есть интерфейс в данном типовом модуле. Если интерфейс уже был зарегистрирован для типа в данном модуле, ничего не происходит.

Пока существуют любые интерфейсы типа, типовой модуль не будет выгружен.

module :

instance_type :

тип к которому добавляется интерфейс.

interface_type :

интерфейсный тип для добавления

interface_info :

структура типовой информации

g_type_module_register_enum ()

находит или регистрирует перечисление которое реализуется с помощью специфичного типового модуля. Если тип с именем type_name был предварительно зарегистрирован, возвращается GType идентификатор для типа, иначе тип вновь регистрируется и возвращается результирующий GType идентификатор.

Пока существуют любые экземпляры типа, типовой модуль не выгружается.

module :

name :

имя для типа

_static_values :

Возвращает :

новый или существующий ID типа

Начиная с версии 2.6

g_type_module_register_flags ()

Находит или регистрирует флаги типа который реализован специфичным типовым модулем. Если тип с именем type_name был предварительно зарегистрирован, возвращается GTypeидентификатор типа, иначе тип вновь регистрируется и возвращается GType идентификатор.

Пока существует любой экземпляр типа, модуль не будет выгружен.

module :

name :

имя для типа

_static_values :

Возвращает :

новый или существующий ID типа

Начиная с версии 2.6

G_DEFINE_DYNAMIC_TYPE()

Удобный макрос для динамической реализации типа, который объявляет функцию инициализации класса, функцию инициализации экземпляра (смотрите GTypeInfo для информации об этом) и статичную переменную с именем t_n_parent_class указывающим на родительский класс. Кроме того, он определяет *_get_type() и статичную функцию *_register_type()для использования в вашей module_init(). Смотрите G_DEFINE_DYNAMIC_TYPE_EXTENDED() для примера.

TN :

Имя нового типа, в стиле CamelCase.

t_n :

Имя нового типа, в нижнем регистре со словами разделёнными символом '_'.

T_P :

GType родительского типа.

Начиная с версии 2.14

G_DEFINE_DYNAMIC_TYPE_EXTENDED()

Более общая версия G_DEFINE_DYNAMIC_TYPE() которая позволяет определять GTypeFlags и произвольный код.

разворачивается до

TypeName :

Имя нового типа, в стиле CamelCase.

type_name :

Имя нового типа в нижнем регистре, со словами разделёнными символом '_'.

TYPE_PARENT :

GType родительского типа.

flags :

GTypeFlags помещаемые в g_type_register_static()

CODE :

Произвольный код вставляемый в функцию *_get_type().

Начиная с версии 2.14

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

Интерфейс загрузчика абстрактного типа.

Портируемый механизм для динамической загрузки модулей.

Last updated

Was this helpful?