Generic Values

Generic Values — Полиморфный тип который может содержать значения любых других типов

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

#include <glib-object.h> #define G_VALUE_HOLDS (value,type) #define G_VALUE_TYPE (value) #define G_VALUE_TYPE_NAME (value) #define G_TYPE_IS_VALUE (type) #define G_TYPE_IS_VALUE_ABSTRACT (type) #define G_IS_VALUE (value) GValue; #define G_TYPE_VALUE #define G_TYPE_VALUE_ARRAY GValue* g_value_init (GValue *value, GType g_type); void g_value_copy (const GValue *src_value, GValue *dest_value); GValue* g_value_reset (GValue *value); void g_value_unset (GValue *value); void g_value_set_instance (GValue *value, gpointer instance); gboolean g_value_fits_pointer (const GValue *value); gpointer g_value_peek_pointer (const GValue *value); gboolean g_value_type_compatible (GType src_type, GType dest_type); gboolean g_value_type_transformable (GType src_type, GType dest_type); gboolean g_value_transform (const GValue *src_value, GValue *dest_value); void (*GValueTransform) (const GValue *src_value, GValue *dest_value); void g_value_register_transform_func (GType src_type, GType dest_type, GValueTransform transform_func); gchar* g_strdup_value_contents (const GValue *value);

Описание

Структура GValue в общем переменная-контейнер которая содержит идентификатор типа и определённое значение этого типа. Идентификатор типа внутри сструктуры GValue всегда определяет тип связанного с ним значения. Для создания неопределённой сструктуры GValue, просто создаётся структура GValue заполненная нулями. Для инициализации GValue, используйте функцию g_value_init(). GValue не может использоваться пока не инициализирована. Основные типовые операции (такие как копирование и освобождение) определяются в GTypeValueTable связанной с типовым ID хранящемся в GValue. Другие GValue операции (такие как преобразование значений между типами) обеспечивает этот интерфейс.

Детали

G_VALUE_HOLDS()

#define G_VALUE_HOLDS(value,type) (G_TYPE_CHECK_VALUE_TYPE ((value), (type)))

Возвращает TRUE если value содержит значение type. Этот макрос также проконтролирует value != NULL и выдаст предупреждение если проверка не удалась.

value : Структура GValue.
type : Значение GType.

G_VALUE_TYPE()

#define G_VALUE_TYPE(value) (((GValue*) (value))->g_type)

Возвращает идентификатор типа value.

value : Структура GValue.

G_VALUE_TYPE_NAME()

#define G_VALUE_TYPE_NAME(value) (g_type_name (G_VALUE_TYPE (value)))

Возвращает типовое имя value.

value : Структура GValue.

G_TYPE_IS_VALUE()

#define G_TYPE_IS_VALUE(type) (g_type_check_is_value_type (type))

Возвращает может ли помещенный типовой ID использоваться для g_value_init(). Таким образом, этот макрос проверяет обеспечивает ли реализация функции GTypeValueTable необходимые для создания типа GValue.

type : Значение GType.
Возвращает : Соответствует ли type типу GValue.

G_TYPE_IS_VALUE_ABSTRACT()

#define G_TYPE_IS_VALUE_ABSTRACT(type) (g_type_test_flags ((type), G_TYPE_FLAG_VALUE_ABSTRACT))

Возвращает TRUE если type это абстрактное значение типа. Абстрактное значение типа входит в таблицу значений, но не может использоваться для g_value_init() и обычно используется как абстрактный базовый тип для производных типовых значений.

type : Значение GType.

G_IS_VALUE()

#define G_IS_VALUE(value) (G_TYPE_CHECK_VALUE (value))

Возвращает TRUE если value это допустимая и инициализированная структура GValue.

value : Структура GValue.

GValue

typedef struct { } GValue;

Не прозрачная структура для содержания разных типовых значений. Данные в структуре являются закрытым контекстом: доступ к ним осуществляется только с помощью функций внутри сструктуры GTypeValueTable, или реализуются g_value_*() API. То есть части кода которые реализуют новые базовые типы. Пользователи GValue не могут предполагать о том как данные хранятся внутри 2 элементов объединения data, а к члену g_type можно обращаться только через макрос G_VALUE_TYPE().


G_TYPE_VALUE

#define G_TYPE_VALUE (g_value_get_type ())

Возвращает типовой ID типа "GValue" который является упаковочным типом, используемый для размещения указателей на GValues.


G_TYPE_VALUE_ARRAY

#define G_TYPE_VALUE_ARRAY (g_value_array_get_type ())

Возвращает типовой ID типа "GValueArray" который является упаковочным типом, используемый для размещения указателей на GValueArrays.


g_value_init ()

GValue* g_value_init (GValue *value, GType g_type);

Инициализирует value которое по умолчанию является значением type.

value : Заполняет нулями (uninitialized) структуру GValue.
g_type : Тип GValue содержащий значения.
Возвращает : Помещённую структуру GValue

g_value_copy ()

void g_value_copy (const GValue *src_value, GValue *dest_value);

Копирует значение src_value в dest_value.

src_value : Инициализирует структуру GValue.
dest_value : Инициализируемая структура GValue того же типа что и src_value.

g_value_reset ()

GValue* g_value_reset (GValue *value);

Очищает текущее значение в value и сбрасывает его в значение по умолчанию (как будто значение было только что инициализировано).

value : Инициализированная структура GValue.
Возвращает : Помещённую структуру GValue

g_value_unset ()

void g_value_unset (GValue *value);

Очищает текущее значение в value и "отменяет установку" ("unsets") типа, это высвобождает все ресурсы связанные с этой структурой GValue. Сбросить значение тоже самое что заполненить нулями (zero-filled) структуру GValue.

value : Инициализированная структура GValue.

g_value_set_instance ()

void g_value_set_instance (GValue *value, gpointer instance);

Устанавливает value из инстанциируемого типа через value_table's функцию collect_value().

value : Инициализированная структура GValue.
instance : экземпляр

g_value_fits_pointer ()

gboolean g_value_fits_pointer (const GValue *value);

Определяет будет ли value соответствовать размеру значения указателя. Это внутренняя функция введённая главным образом для C маршаллеров.

value : Инициализированная структура GValue.
Возвращает : TRUE если value будет соответствовать значению указателя.

g_value_peek_pointer ()

gpointer g_value_peek_pointer (const GValue *value);

Возвращает содержимое значения как указатель. Эта функция утверждает что g_value_fits_pointer() возвратит TRUE для помещённого значения. Это внутренняя функция введённая главным образом для C маршаллеров.

value : Инициализированная структура GValue.
Возвращает : TRUE если value будет соответствовать значению указателя.

g_value_type_compatible ()

gboolean g_value_type_compatible (GType src_type, GType dest_type);

Возвращает может ли GValue типа src_type быть скопирована в GValue типа dest_type.

src_type : исходный тип для копирования.
dest_type : целевой тип для копирования.
Возвращает : TRUE если g_value_copy() возможно использовать с src_type и dest_type.

g_value_type_transformable ()

gboolean g_value_type_transformable (GType src_type, GType dest_type);

Проверяет может ли g_value_transform() преобразовать значения типа src_type в значения типа dest_type.

src_type : Исходный тип.
dest_type : Целевой тип.
Возвращает : TRUE если преобразование возможно, иначе FALSE.

g_value_transform ()

gboolean g_value_transform (const GValue *src_value, GValue *dest_value);

Пробует преобразовать содержимое src_value в тип подходящий для сохранения в dest_value, например преобразовать значение G_TYPE_INT в значение G_TYPE_FLOAT. Выполнение преобразования между значениями типов может привести к серьёзной программной ошибке (lossage). Особенно преобразование в строки может привести к непредсказуемым результатам на которые нельзя положиться в производственном коде (такие как значение rcfile или преобразование в последовательную форму свойства объекта).

src_value : Исходное значение.
dest_value : Целевое значение.
Возвращает : Найдено ли правило преобразование и может ли быть применено. После неудачной попытки преобразования, dest_value остаётся нетронутым.

GValueTransform ()

void (*GValueTransform) (const GValue *src_value, GValue *dest_value);

Функция преобразования типовых значений которая может быть зарегистрирована с помощью g_value_register_transform_func().

src_value : Исходное значение.
dest_value : Целевое значение.

g_value_register_transform_func ()

void g_value_register_transform_func (GType src_type, GType dest_type, GValueTransform transform_func);

Регистрирует функцию преобразования значений для использования в g_value_transform(). Предварительно зарегистрированная функция для src_type и dest_type будет заменена.

src_type : Исходное значение.
dest_type : Целевое значение.
transform_func : функция которая преобразует значение типа src_type в значение типа dest_type

g_strdup_value_contents ()

gchar* g_strdup_value_contents (const GValue *value);

Возвращает вновь рапределённую строку, которая описывает содержимое GValue. Основная цель этой функции состоит в том чтобы описать содержимое GValue для отладочного вывода, способ которым описывается содержимое может меняться в разных версиях GLib.

value : GValue контекст которой описывается.
Возвращает : Вновь распределённая строка.

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

Базовые типы которые всегда поддерживают GValue операции и поэтому могут использоваться как тип инициализации для g_value_init() определены отдельным интерфейсом. Детали смотрите в Standard Values API.