GBoxed

GBoxed — Механизм упаковки непрозрачных C структур регистрируемых системой типов

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

#include <glib-object.h> gpointer (*GBoxedCopyFunc) (gpointer boxed); void (*GBoxedFreeFunc) (gpointer boxed); gpointer g_boxed_copy (GType boxed_type, gconstpointer src_boxed); void g_boxed_free (GType boxed_type, gpointer boxed); GType g_boxed_type_register_static (const gchar *name, GBoxedCopyFunc boxed_copy, GBoxedFreeFunc boxed_free); GType g_pointer_type_register_static (const gchar *name); #define G_TYPE_HASH_TABLE #define G_TYPE_DATE #define G_TYPE_GSTRING #define G_TYPE_STRV #define G_TYPE_REGEX typedef GStrv;

Описание

GBoxed это родной механизм упаковки для произвольных C структур. Единственная вещь которую нужно знать системе типов о структурах - как копировать и освобождать их, за тем они обрабатываются как непрозрачные участки памяти.

Упаковочные типы полезны для простых структур содержащих значения как прямоугольники или точки. Они так же могут быть использованы для упаковки структур определённых в библиотеках основанных не на GObject.

Детали

GBoxedCopyFunc ()

gpointer (*GBoxedCopyFunc) (gpointer boxed);

Эта функция обеспечивается пользователем и должна производить копию помещённой в контейнер сструктуры.

boxed : Упакованная структура для копирования.
Возвращает : Вновь созданная копия упакованной сструктуры.

GBoxedFreeFunc ()

void (*GBoxedFreeFunc) (gpointer boxed);

Эта функция обеспечивается пользователем и должна освобождать структуру помещённую в контейнере.

boxed : Упакованная структура для освобождения.

g_boxed_copy ()

gpointer g_boxed_copy (GType boxed_type, gconstpointer src_boxed);

Обеспечивает копию упакованной сструктуры src_boxed с типом boxed_type.

boxed_type : Тип src_boxed.
src_boxed : Упакованная структура для копирования.
Возвращает : Вновь созданная копия упакованной сструктуры.

g_boxed_free ()

void g_boxed_free (GType boxed_type, gpointer boxed);

Освобождает упакованную структуру boxed с типом boxed_type.

boxed_type : Тип boxed.
boxed : Упакованная структура для освобождения.

g_boxed_type_register_static ()

GType g_boxed_type_register_static (const gchar *name, GBoxedCopyFunc boxed_copy, GBoxedFreeFunc boxed_free);

Эта функция создаёт новый G_TYPE_BOXED производный типовой id для нового упаковочного типа с именем name. Упаковочный тип необходимо обеспечить функциями обработки для копирования и освобождения непрозрачных упакованных структур этого типа.

name : Имя нового упаковочного типа.
boxed_copy : Функция копирования упакованной сструктуры.
boxed_free : Функция освобождения упакованной сструктуры.
Возвращает : Новый произведённый G_TYPE_BOXED типовой id для name.

g_pointer_type_register_static ()

GType g_pointer_type_register_static (const gchar *name);

Создаёт новый производный G_TYPE_POINTER типовой id для нового типа указателя с именем name.

name : имя нового типа указателя.
Возвращает : новый производный G_TYPE_POINTER типовой id для name.

G_TYPE_HASH_TABLE

#define G_TYPE_HASH_TABLE (g_hash_table_get_type ())

GType упаковочного типа для содержания ссылки GHashTable.

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


G_TYPE_DATE

#define G_TYPE_DATE (g_date_get_type ())

GType для GDate.


G_TYPE_GSTRING

#define G_TYPE_GSTRING (g_gstring_get_type ())

GType для GString.


G_TYPE_STRV

#define G_TYPE_STRV (g_strv_get_type ())

GType для упаковочного типа содержащего NULL-завершённый массив строк.

Фрагменты кода в следующем примере демонстрируют использование типового свойства G_TYPE_STRV с помощью g_object_class_install_property(), g_object_set() и g_object_get().

g_object_class_install_property (object_class, PROP_AUTHORS, g_param_spec_boxed ("authors", _("Authors"), _("List of authors"), G_TYPE_STRV, G_PARAM_READWRITE)); gchar *authors[] = { "Owen", "Tim", NULL }; g_object_set (obj, "authors", authors, NULL); gchar *writers[]; g_object_get (obj, "authors", &writers, NULL); /* do something with writers */ g_strfreev (writers);

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


G_TYPE_REGEX

#define G_TYPE_REGEX (g_regex_get_type ())

GType упаковочного типа содержащий ссылку GRegex.

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


GStrv

typedef gchar** GStrv;

'C' репрезентабельное типовое имя для G_TYPE_STRV.

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

GParamSpecBoxed, g_param_spec_boxed()