The OpenNET Project / Index page

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

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

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.




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

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