Справочное описание GObject | ||||
---|---|---|---|---|
#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 операции
(такие как преобразование значений между типами) обеспечивает этот интерфейс.
#define G_VALUE_HOLDS(value,type) (G_TYPE_CHECK_VALUE_TYPE ((value), (type)))
Возвращает TRUE
если
value
содержит значение type
.
Этот макрос также проконтролирует
value
!= NULL
и выдаст предупреждение если проверка не удалась.
#define G_VALUE_TYPE(value) (((GValue*) (value))->g_type)
Возвращает идентификатор типа value
.
value : |
Структура GValue. |
#define G_VALUE_TYPE_NAME(value) (g_type_name (G_VALUE_TYPE (value)))
Возвращает типовое имя value
.
value : |
Структура GValue. |
#define G_TYPE_IS_VALUE(type) (g_type_check_is_value_type (type))
Возвращает может ли помещенный типовой ID использоваться для
g_value_init()
.
Таким образом, этот макрос проверяет обеспечивает ли реализация функции
GTypeValueTable необходимые для создания типа
GValue.
#define G_TYPE_IS_VALUE_ABSTRACT(type) (g_type_test_flags ((type), G_TYPE_FLAG_VALUE_ABSTRACT))
Возвращает TRUE
если
type
это абстрактное значение типа. Абстрактное значение типа входит в таблицу значений,
но не может использоваться для g_value_init()
и обычно используется как абстрактный базовый тип для производных типовых значений.
type : |
Значение GType. |
#define G_IS_VALUE(value) (G_TYPE_CHECK_VALUE (value))
Возвращает TRUE
если
value
это допустимая и инициализированная структура
GValue.
value : |
Структура GValue. |
typedef struct {
} GValue;
Не прозрачная структура для содержания разных типовых значений.
Данные в структуре являются закрытым контекстом: доступ к ним осуществляется только с помощью функций внутри сструктуры
GTypeValueTable, или реализуются g_value_*() API.
То есть части кода которые реализуют новые базовые типы.
Пользователи GValue не могут предполагать о том как данные
хранятся внутри 2 элементов объединения data
, а к члену
g_type
можно обращаться только через макрос
G_VALUE_TYPE()
.
#define G_TYPE_VALUE (g_value_get_type ())
Возвращает типовой ID типа "GValue" который является упаковочным типом, используемый для размещения указателей на GValues.
#define G_TYPE_VALUE_ARRAY (g_value_array_get_type ())
Возвращает типовой ID типа "GValueArray" который является упаковочным типом, используемый для размещения указателей на GValueArrays.
GValue* g_value_init (GValue *value,
GType g_type);
Инициализирует value
которое по умолчанию является значением
type
.
void g_value_copy (const GValue *src_value,
GValue *dest_value);
Копирует значение src_value
в dest_value
.
GValue* g_value_reset (GValue *value);
Очищает текущее значение в value
и сбрасывает его в значение по умолчанию
(как будто значение было только что инициализировано).
void g_value_unset (GValue *value);
Очищает текущее значение в value
и "отменяет установку" ("unsets") типа,
это высвобождает все ресурсы связанные с этой структурой GValue.
Сбросить значение тоже самое что заполненить нулями (zero-filled) структуру
GValue.
value : |
Инициализированная структура GValue. |
void g_value_set_instance (GValue *value,
gpointer instance);
Устанавливает value
из инстанциируемого типа через
value_table's функцию collect_value()
.
value : |
Инициализированная структура GValue. |
instance : |
экземпляр |
gboolean g_value_fits_pointer (const GValue *value);
Определяет будет ли value
соответствовать размеру значения указателя.
Это внутренняя функция введённая главным образом для C маршаллеров.
gpointer g_value_peek_pointer (const GValue *value);
Возвращает содержимое значения как указатель. Эта функция утверждает что
g_value_fits_pointer()
возвратит TRUE
для помещённого значения.
Это внутренняя функция введённая главным образом для C маршаллеров.
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 .
|
gboolean g_value_type_transformable (GType src_type,
GType dest_type);
Проверяет может ли g_value_transform()
преобразовать значения типа src_type
в значения типа
dest_type
.
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 остаётся нетронутым.
|
void (*GValueTransform) (const GValue *src_value,
GValue *dest_value);
Функция преобразования типовых значений которая может быть зарегистрирована с помощью
g_value_register_transform_func()
.
src_value : |
Исходное значение. |
dest_value : |
Целевое значение. |
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
|
gchar* g_strdup_value_contents (const GValue *value);
Возвращает вновь рапределённую строку, которая описывает содержимое GValue. Основная цель этой функции состоит в том чтобы описать содержимое GValue для отладочного вывода, способ которым описывается содержимое может меняться в разных версиях GLib.
value : |
GValue контекст которой описывается. |
Возвращает : | Вновь распределённая строка. |
Базовые типы которые всегда поддерживают GValue операции и
поэтому могут использоваться как тип инициализации для
g_value_init()
определены отдельным интерфейсом.
Детали смотрите в Standard Values
API.