Справочное описание GLib | ||||
---|---|---|---|---|
Keyed Data ListsKeyed Data Lists — Списки элементов данных которые являются доступными при помощи строки или GQuark идентификатора. |
#include <glib.h>
GData;
void g_datalist_init (GData **datalist);
#define g_datalist_id_set_data (dl, q, d)
void g_datalist_id_set_data_full (GData **datalist,
GQuark key_id,
gpointer data,
GDestroyNotify destroy_func);
gpointer g_datalist_id_get_data (GData **datalist,
GQuark key_id);
#define g_datalist_id_remove_data (dl, q)
gpointer g_datalist_id_remove_no_notify (GData **datalist,
GQuark key_id);
#define g_datalist_set_data (dl, k, d)
#define g_datalist_set_data_full (dl, k, d, f)
#define g_datalist_get_data (dl, k)
#define g_datalist_remove_data (dl, k)
#define g_datalist_remove_no_notify (dl, k)
void g_datalist_foreach (GData **datalist,
GDataForeachFunc func,
gpointer user_data);
void g_datalist_clear (GData **datalist);
void g_datalist_set_flags (GData **datalist,
guint flags);
void g_datalist_unset_flags (GData **datalist,
guint flags);
guint g_datalist_get_flags (GData **datalist);
#define G_DATALIST_FLAGS_MASK
Списки ключевых данных обеспечивают списки произвольных элементов данных к которым можно обратиться либо с помощью строки, либо с помощью GQuark соответствующим строке.
GQuark метод быстрее, так как строки всё равно конвертируются в GQuarks.
Списки данных используются для связи произвольных данных с GObjects,
используя g_object_set_data()
и родственные функции.
Для создания списка данных, используйте g_datalist_init()
.
Для добавления элементов данных в список данных используйте g_datalist_id_set_data()
,
g_datalist_id_set_data_full()
, g_datalist_set_data()
и g_datalist_set_data_full()
.
Для получения элементов данных из списка данных используйте g_datalist_id_get_data()
и
g_datalist_get_data()
.
Для итерации через все элементы в списке данных используйте g_datalist_foreach()
(not thread-safe).
Для удаления элементов данных из списка данных используйте g_datalist_id_remove_data()
и
g_datalist_remove_data()
.
Для удаления всех элементов из списка данных, используйте g_datalist_clear()
.
typedef struct _GData GData;
Структура GData - это непрозрачная структура данных представляющая Keyed Data List. доступ к ней должен осуществляться только с помощью следующих функций.
void g_datalist_init (GData **datalist);
Сбрасывает список данных в NULL
.
Она не освобождает память и не вызывает функции уничтожения.
datalist : |
указатель на указатель в списке данных. |
#define g_datalist_id_set_data(dl, q, d)
Устанавливает данные соответствующие указанному GQuark идентификатору. Любые предыдущие данные с тем же ключом - удаляются, и это вызывает функцию уничтожения.
void g_datalist_id_set_data_full (GData **datalist,
GQuark key_id,
gpointer data,
GDestroyNotify destroy_func);
Устанавливает данные соответствующие указанному GQuark идентификатору, и вызывает функцию когда элемент удаляется из списка данных. Любые предыдущие данные с тем же ключом удаляются и вызывается функция уничтожения.
datalist : |
список данных. |
key_id : |
GQuark для идентификации элемента данных. |
data : |
элемент данных или NULL
для удаления любых предыдущих элементов соответствующих key_id .
|
destroy_func : |
функция вызываемая когда удаляется элемент данных. Эта функция вызывается с элементом данных и может использоваться для освобождения
любой распределённой памяти для него. Если data это
NULL , то
destroy_func должен также быть
NULL .
|
gpointer g_datalist_id_get_data (GData **datalist,
GQuark key_id);
Находит элемент данных соответствующий key_id
.
#define g_datalist_id_remove_data(dl, q)
Удаляет элемент, используя его GQuark идентификатор.
dl : |
список данных. |
q : |
GQuark идентификатор элемента данных. |
gpointer g_datalist_id_remove_no_notify (GData **datalist,
GQuark key_id);
Удаляет элемент, без вызова функции уничтожения.
#define g_datalist_set_data(dl, k, d)
Устанавливает элемент данных соответствующий указанному строковому идентификатору.
dl : |
список данных. |
k : |
строка для идентификации элемента данных. |
d : |
элемент данных, или NULL
для удаления любых предыдущих элементов соответствующих k .
|
#define g_datalist_set_data_full(dl, k, d, f)
Устанавливает элемент данных соответствующий указанной строке идентификатору, и функцию вызываемую при удалении элемента данных.
dl : |
список данных. |
k : |
строка для идентификации элемента данных. |
d : |
элемент данных, или NULL
для удаления любых предыдущих элементов соответствующих k .
|
f : |
Функция вызываемая при удалении элемента данных. Эта функция вызывается с элементом данных и может использоваться для освобождения
любой распределённой для него памяти. Если d это
NULL , то
f должен также быть
NULL .
|
#define g_datalist_get_data(dl, k)
Выдаёт элемент данных, используя его строку идентификатор.
Это медленнее чем g_datalist_id_get_data()
потомучто строка сначала конвертируется в GQuark.
dl : |
список данных. |
k : |
строка идентификатор элемента данных. |
Возвращает : | элемент данных, или NULL если он не найден.
|
#define g_datalist_remove_data(dl, k)
Удаляет элемент используя его строковый идентификатор. Элемент данных уничтожается функцией если она была установлена.
dl : |
список данных. |
k : |
строка идентификатор элемента данных. |
#define g_datalist_remove_no_notify(dl, k)
Удаляет элемент, без вызова уничтожающей функции.
dl : |
список данных. |
k : |
строка идентификатор элемента данных. |
void g_datalist_foreach (GData **datalist,
GDataForeachFunc func,
gpointer user_data);
Вызывает указанную функцию для каждого элемента данных в списке данных.
Функция вызывается на каждым элементом данных с GQuark
идентификатором и данными, вместе с параметром user_data
.
Помните что эта функция потоко-небезопасна. Поэтому если datalist
не может быть
защищён от любых изменений в течении выполнения этой функции, она не должна вызываться.
datalist : |
список данных. |
func : |
функция вызываемая для каждого элемента данных. |
user_data : |
пользовательские данные помещаемые в функцию. |
void g_datalist_clear (GData **datalist);
Освобождает все элементы данных в списке данных. Элементы данных уничтожаются функциями вызываемыми если она была установлена.
datalist : |
список данных. |
void g_datalist_set_flags (GData **datalist,
guint flags);
Включает значение флажка для списка данных. Эта функция используется для хранения небольшого числа логических флажков в объекте со списком данных без использования любого дополнительного пространства. Она в основном бесполезна, кроме ситуаций когда пространство сильно уплотнено. (Она в основном типе GObject, например.)
datalist : |
указатель на расположение которое содержит список |
flags : |
флажки для включения. Значения флажков ограничены
G_DATALIST_FLAGS_MASK
(в настоящее время 3; представляя два возможных логических флажка).
Значение для flags которое не соответствует маске - ошибика.
|
Начиная с версии 2.8
void g_datalist_unset_flags (GData **datalist,
guint flags);
Выключает значения флажка для списка данных.
Смотрите g_datalist_unset_flags()
datalist : |
указатель на расположение которое содержит список |
flags : |
флажки для выключения. Значения флажков ограничены
G_DATALIST_FLAGS_MASK
(в настоящее время 3: представляя два возможных логических флажка).
Значение для flags которое не соответствует маске - ошибка.
|
Начиная с версии 2.8
guint g_datalist_get_flags (GData **datalist);
Определяет значения флажков упакованных вместе со списком данных.
Смотрите g_datalist_set_flags()
.
datalist : |
указатель на расположение которое содержит список |
Возвращает : | флажки списка данных |
Начиная с версии 2.8
#define G_DATALIST_FLAGS_MASK 0x3
Битовая маска которая ограничивает возможные флажки помещаемые в
g_datalist_set_flags()
.
Помещаемые значения флажков где флажки & ~G_DATALIST_FLAGS_MASK != 0 - это ошибка.