Перечисления и Флаги

Enums and Flags — Перечисления и типовые флажки

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

#include <glib-object.h> GEnumClass; GFlagsClass; #define G_ENUM_CLASS_TYPE (class) #define G_ENUM_CLASS_TYPE_NAME (class) #define G_TYPE_IS_ENUM (type) #define G_ENUM_CLASS (class) #define G_IS_ENUM_CLASS (class) #define G_TYPE_IS_FLAGS (type) #define G_FLAGS_CLASS (class) #define G_IS_FLAGS_CLASS (class) #define G_FLAGS_CLASS_TYPE (class) #define G_FLAGS_CLASS_TYPE_NAME (class) GEnumValue; GFlagsValue; GEnumValue* g_enum_get_value (GEnumClass *enum_class, gint value); GEnumValue* g_enum_get_value_by_name (GEnumClass *enum_class, const gchar *name); GEnumValue* g_enum_get_value_by_nick (GEnumClass *enum_class, const gchar *nick); GFlagsValue* g_flags_get_first_value (GFlagsClass *flags_class, guint value); GFlagsValue* g_flags_get_value_by_name (GFlagsClass *flags_class, const gchar *name); GFlagsValue* g_flags_get_value_by_nick (GFlagsClass *flags_class, const gchar *nick); GType g_enum_register_static (const gchar *name, const GEnumValue *const _static_values); GType g_flags_register_static (const gchar *name, const GFlagsValue *const _static_values); void g_enum_complete_type_info (GType g_enum_type, GTypeInfo *info, const GEnumValue *const _values); void g_flags_complete_type_info (GType g_flags_type, GTypeInfo *info, const GFlagsValue *const _values);

Описание

Система типов GLib обеспечивает базовые типы для перечислений и типовых флажков. (Типовые флаги похожи на перечисления, но позволяют поразрядное комбинирование своих значений). Регистрация перечисления или типовых флажков связывает имя и псевдоним с каждым возможным значением, а методы g_enum_get_value_by_name(), g_enum_get_value_by_nick(), g_flags_get_value_by_name() и g_flags_get_value_by_nick() могут находить значение по их имени или псевдониму. Когда перечисление или типовые флаги зарегистрированы системой типов GLib, они могут использоваться как типовое значение для свойств объекта, используя g_param_spec_enum() или g_param_spec_flags().

GObject устанавливается с помощью утилиты называемой glib-mkenums которая может конструировать подходящий тип регистрационных функций из определённых C перечислений.

Детали

GEnumClass

typedef struct { GTypeClass g_type_class; gint minimum; gint maximum; guint n_values; GEnumValue *values; } GEnumClass;

Класс типового перечисления содержит информацию о возможных значениях.

GTypeClass  g_type_class; родительский класс
gint  minimum; минимально-возможное значение.
gint  maximum; максимально-возможное значение.
guint  n_values; количество возможных значений.
GEnumValue *values; массив структур GEnumValue описывающих индивидуальные значения.

GFlagsClass

typedef struct { GTypeClass g_type_class; guint mask; guint n_values; GFlagsValue *values; } GFlagsClass;

Класс типовых флажков содержит информацию об их возможных значениях.

GTypeClass g_type_class; родительский класс
guint  mask; маска покрывающая возможные значения.
guint  n_values; количество возможных значений.
GFlagsValue *values; массив структур GFlagsValue описывающих индивидуальные значения.

G_ENUM_CLASS_TYPE()

#define G_ENUM_CLASS_TYPE(class) (G_TYPE_FROM_CLASS (class))

Возвращает идентификатор типа из полученной структуры GEnumClass.

class : GEnumClass

G_ENUM_CLASS_TYPE_NAME()

#define G_ENUM_CLASS_TYPE_NAME(class) (g_type_name (G_ENUM_CLASS_TYPE (class)))

Возвращает статичное имя типа полученное из сструктуры GEnumClass.

class : GEnumClass

G_TYPE_IS_ENUM()

#define G_TYPE_IS_ENUM(type) (G_TYPE_FUNDAMENTAL (type) == G_TYPE_ENUM)

Возвращает является ли type "is a" G_TYPE_ENUM.

type : GType ID.

G_ENUM_CLASS()

#define G_ENUM_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_ENUM, GEnumClass))

Приводит производную структуру GEnumClass в структуру GEnumClass.

class : допустимая GEnumClass

G_IS_ENUM_CLASS()

#define G_IS_ENUM_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_ENUM))

Проверяет является ли class "is a" допустимой структурой GEnumClass типа G_TYPE_ENUM или производной.

class : GEnumClass

G_TYPE_IS_FLAGS()

#define G_TYPE_IS_FLAGS(type) (G_TYPE_FUNDAMENTAL (type) == G_TYPE_FLAGS)

Возвращает является ли type "is a" G_TYPE_FLAGS.

type : GType ID.

G_FLAGS_CLASS()

#define G_FLAGS_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_FLAGS, GFlagsClass))

Приводит производную структуру GFlagsClass в структуру GFlagsClass.

class : допустимая GFlagsClass

G_IS_FLAGS_CLASS()

#define G_IS_FLAGS_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_FLAGS))

Проверяет является ли class "is a" допустимой структурой GFlagsClass типа G_TYPE_FLAGS или производной.

class : GFlagsClass

G_FLAGS_CLASS_TYPE()

#define G_FLAGS_CLASS_TYPE(class) (G_TYPE_FROM_CLASS (class))

Возвращает идентификатор типа из полученной сструктуры GFlagsClass.

class : GFlagsClass

G_FLAGS_CLASS_TYPE_NAME()

#define G_FLAGS_CLASS_TYPE_NAME(class) (g_type_name (G_FLAGS_CLASS_TYPE (class)))

Возвращает статичное имя из полученной сструктуры GFlagsClass.

class : GFlagsClass

GEnumValue

typedef struct { gint value; const gchar *value_name; const gchar *value_nick; } GEnumValue;

Структура содержащая единственное значение перечисления, его имя, и его псевдоним.

gint  value; значение перечисления
const gchar  *value_name; имя значения
const gchar  *value_nick; псевдоним значения

GFlagsValue

typedef struct { guint value; const gchar *value_name; const gchar *value_nick; } GFlagsValue;

Структура содержащая единственное значение флажка, его имя, и его псевдоним.

guint  value; значение флажка
const gchar  *value_name; имя значения
const gchar  *value_nick; псевдоним значения

g_enum_get_value ()

GEnumValue* g_enum_get_value (GEnumClass *enum_class, gint value);

Возвращает GEnumValue для значения.

enum_class : GEnumClass
value : значение для поиска
Возвращает : GEnumValue для value, или NULL если value не член перечисления

g_enum_get_value_by_name ()

GEnumValue* g_enum_get_value_by_name (GEnumClass *enum_class, const gchar *name);

Находит GEnumValue по имени.

enum_class : GEnumClass
name : имя для поиска
Возвращает : GEnumValue с именем name, или NULL если перечисление не имеет член с таким именем

g_enum_get_value_by_nick ()

GEnumValue* g_enum_get_value_by_nick (GEnumClass *enum_class, const gchar *nick);

Находит GEnumValue по псевдониму.

enum_class : GEnumClass
nick : псевдоним для поиска
Возвращает : GEnumValue с псевдонимом nick, или NULL если перечисление не имеет член с таким псевдонимом

g_flags_get_first_value ()

GFlagsValue* g_flags_get_first_value (GFlagsClass *flags_class, guint value);

Возвращает первое GFlagsValue которое устанавливается в value.

flags_class : GFlagsClass
value : значение
Возвращает : первое GFlagsValue которое установлено в value, или NULL если не установлено

g_flags_get_value_by_name ()

GFlagsValue* g_flags_get_value_by_name (GFlagsClass *flags_class, const gchar *name);

Находит GFlagsValue по имени.

flags_class : GFlagsClass
name : имя для поиска
Возвращает : GFlagsValue с именем name, или NULL если нет флага с таким именем

g_flags_get_value_by_nick ()

GFlagsValue* g_flags_get_value_by_nick (GFlagsClass *flags_class, const gchar *nick);

Находит GFlagsValue по псевдониму.

flags_class : GFlagsClass
nick : псевдоним для поиска
Возвращает : GFlagsValue с псевдонимом nick, или NULL если нет флага стаким псевдонимом

g_enum_register_static ()

GType g_enum_register_static (const gchar *name, const GEnumValue *const _static_values);

Регистрирует новый статичный тип перечисления с именем name.

Обычно более удобно позволить glib-mkenums сгенирировать функцию my_enum_get_type() из обычного определения перечисления C, чем самостоятельно писать используя g_enum_register_static().

name : Nul-завершённая строка используемая как имя нового типа.
_static_values :
Возвращает : Идентификатор нового типа.

g_flags_register_static ()

GType g_flags_register_static (const gchar *name, const GFlagsValue *const _static_values);

Регистрирует новый статичный флаговый тип с именем name.

Обычно более удобно позволить glib-mkenums сгенирировать функцию my_flags_get_type() из обычного определения перечисления C, чем самостоятельно писать используя g_flags_register_static().

name : Nul-завершённая строка используемая как имя нового типа.
_static_values :
Возвращает : Идентификатор нового типа.

g_enum_complete_type_info ()

void g_enum_complete_type_info (GType g_enum_type, GTypeInfo *info, const GEnumValue *const _values);

Эта функция предназначена для вызова из функции complete_type_info() реализации GTypePlugin, как показано в следующем примере:

static void my_enum_complete_type_info (GTypePlugin *plugin, GType g_type, GTypeInfo *info, GTypeValueTable *value_table) { static const GEnumValue values[] = { { MY_ENUM_FOO, "MY_ENUM_FOO", "foo" }, { MY_ENUM_BAR, "MY_ENUM_BAR", "bar" }, { 0, NULL, NULL } }; g_enum_complete_type_info (type, info, values); }

g_enum_type : типовой идентификатор заполняемого типа
info : Структура GTypeInfo для заполнения
_values :

g_flags_complete_type_info ()

void g_flags_complete_type_info (GType g_flags_type, GTypeInfo *info, const GFlagsValue *const _values);

Эта функция предназначена для вызова из функции complete_type_info() реализации GTypePlugin, смотрите пример для g_enumeration_complete_type_info() выше.

g_flags_type : типовой идентификатор заполняемого типа
info : Структура GTypeInfo для заполнения
_values :

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

GParamSpecEnum, GParamSpecFlags, g_param_spec_enum(), g_param_spec_flags(), glib-mkenums