Relations and Tuples

Relations and Tuples — Таблицы данных которые могут быть проиндексированы любым количеством полей.

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

#include <glib.h> GRelation; GRelation* g_relation_new (gint fields); void g_relation_index (GRelation *relation, gint field, GHashFunc hash_func, GEqualFunc key_equal_func); void g_relation_insert (GRelation *relation, ...); gboolean g_relation_exists (GRelation *relation, ...); gint g_relation_count (GRelation *relation, gconstpointer key, gint field); GTuples* g_relation_select (GRelation *relation, gconstpointer key, gint field); gint g_relation_delete (GRelation *relation, gconstpointer key, gint field); void g_relation_destroy (GRelation *relation); void g_relation_print (GRelation *relation); GTuples; void g_tuples_destroy (GTuples *tuples); gpointer g_tuples_index (GTuples *tuples, gint index_, gint field);

Описание

GRelation - это таблица данных которая может быть проиндексирована любым количеством полей, точнее как простые таблицы базы данных. GRelation содержит множество записей, называемых кортежами. каждая запись содержит множество полей. Записи не сортируются, поэтому невозможно найти запись по порядковому номеру.

Помните что GRelation таблицы в настоящее время лимитированы двумя полями.

Для создания GRelation, используйте g_relation_new().

Для определения какие поля должны проиндексироваться, используйте g_relation_index(). Помните что её нужно вызывать прежде чем любой кортеж будет добавлен в GRelation.

Для добавления записей в GRelation используйте g_relation_insert().

Для определения есть ли данная запись в GRelation, используйте g_relation_exists(). Помните что поля сравниваются непосредственно, поэтому указатели должны указывать в туже самую позицию (то есть разные копии одной и той же строки не будут соответсвовать.)

Для подсчёта количества записей которые имеют специфичное значение в указанном поле, используйте g_relation_count().

Для получения всех записей которые имеют специфичное значение в указанном поле, используйте g_relation_select(). Для доступа к полям получившихся записей, используйте g_tuples_index(). Для освобождения получившихся записей используйте g_tuples_destroy().

Для удаления всех записей которые имеют специфичное значение в указанном поле, используйте g_relation_delete().

Для уничтожения GRelation, используйте g_relation_destroy().

Для помощи отслеживания объектов GRelation, используйте g_relation_print().

Детали

GRelation

typedef struct _GRelation GRelation;

Структура GRelation - это непрозрачная структура данных представляющая Relation. Доступ к ней должен осуществляться только следующими функциями.


g_relation_new ()

GRelation* g_relation_new (gint fields);

Создаёт новую GRelation с указанным количеством полей. Помните что текущее количество полей должно быть 2.

fields : количество полей.
Возвращает : новая GRelation.

g_relation_index ()

void g_relation_index (GRelation *relation, gint field, GHashFunc hash_func, GEqualFunc key_equal_func);

Создаёт индекс указанного поля. Помните что её нужно вызвать перед добавлением любых записей в GRelation.

relation : GRelation.
field : индексируемое поле, подсчёт с 0.
hash_func : функция для производства хеш значения из поля данных.
key_equal_func : функция для сравнения двух значений указанного поля.

g_relation_insert ()

void g_relation_insert (GRelation *relation, ...);

Вставляет запись в GRelation.

relation : GRelation.
... : поля добавляемой записи. Должно соответствовать количеству полей в GRelation, и типу gpointer или gconstpointer.

g_relation_exists ()

gboolean g_relation_exists (GRelation *relation, ...);

Возвращает TRUE если запись с указанным значением существует в GRelation. Помните что значения сравниваются непосредственно, поэтому, например, две копии одной и той же строки не будут соответствовать.

relation : GRelation.
... : поля записи для сравнения. Количество должно соответствовать количеству полей в GRelation.
Возвращает : TRUE если запись соответсвует.

g_relation_count ()

gint g_relation_count (GRelation *relation, gconstpointer key, gint field);

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

relation : GRelation.
key : значение для сравнения.
field : поле в каждой записи для сопоставления.
Возвращает : количество соответствий.

g_relation_select ()

GTuples* g_relation_select (GRelation *relation, gconstpointer key, gint field);

Возвращает все кортежи которые имеют указанный ключ в указанном поле. Используйте g_tuples_index() для доступа к возвращаемым записям. Возвращаемые записи должны быть освобождены с помощью g_tuples_destroy().

relation : GRelation.
key : значение для сравнения.
field : поле в каждой записи для сопоставления.
Возвращает : записи (кортежи) которые соответствуют.

g_relation_delete ()

gint g_relation_delete (GRelation *relation, gconstpointer key, gint field);

Удаляет любые записи из GRelation которые имеют указанный ключ в указанном поле.

relation : GRelation.
key : значение для сравнения.
field : поле каждой записи для сопоставления.
Возвращает : количество удалённых записей.

g_relation_destroy ()

void g_relation_destroy (GRelation *relation);

Уничтожает GRelation, освобождает всю распределённую память. Однако, она не освобождает память распределённую для кортежей данных, поэтому вы должны освободить их соответственно первыми.

relation : GRelation.

g_relation_print ()

void g_relation_print (GRelation *relation);

Выводит информацию о всех записях в GRelation, также как о индексах. Это для отладки.

relation : GRelation.

GTuples

typedef struct { guint len; } GTuples;

Структура GTuples используется для возвращаемых записей (или кортежей) из GRelation с помощью g_relation_select(). Она содержит только одно общедоступное поле - количество записей которые соответствуют. Для доступа к соответствующим записям вы должны использовать g_tuples_index().

guint len; количество записей которое соответствует.

g_tuples_destroy ()

void g_tuples_destroy (GTuples *tuples);

Освобождает записи которые были возвращены g_relation_select(). Она должна всегда вызываться после g_relation_select() когда вы закончите с записями. Записи не удаляются из GRelation.

tuples : кортежи данных для освобождения.

g_tuples_index ()

gpointer g_tuples_index (GTuples *tuples, gint index_, gint field);

Получает поля из записей возвращённых g_relation_select(). Она возвращает указанное поле записи по указанному индексу. Возвращаемое значение не должно изменяться.

tuples : кортеж данных, возвращаемый g_relation_select().
index_ : индекс записи.
field : возвращаемое поле.
Возвращает : поле записи.