| |
| Справочное описание GLib | ||||
|---|---|---|---|---|
#include <glib.h>
GHashTable;
GHashTable* g_hash_table_new (GHashFunc hash_func,
GEqualFunc key_equal_func);
GHashTable* g_hash_table_new_full (GHashFunc hash_func,
GEqualFunc key_equal_func,
GDestroyNotify key_destroy_func,
GDestroyNotify value_destroy_func);
guint (*GHashFunc) (gconstpointer key);
gboolean (*GEqualFunc) (gconstpointer a,
gconstpointer b);
void g_hash_table_insert (GHashTable *hash_table,
gpointer key,
gpointer value);
void g_hash_table_replace (GHashTable *hash_table,
gpointer key,
gpointer value);
guint g_hash_table_size (GHashTable *hash_table);
gpointer g_hash_table_lookup (GHashTable *hash_table,
gconstpointer key);
gboolean g_hash_table_lookup_extended (GHashTable *hash_table,
gconstpointer lookup_key,
gpointer *orig_key,
gpointer *value);
void g_hash_table_foreach (GHashTable *hash_table,
GHFunc func,
gpointer user_data);
gpointer g_hash_table_find (GHashTable *hash_table,
GHRFunc predicate,
gpointer user_data);
void (*GHFunc) (gpointer key,
gpointer value,
gpointer user_data);
gboolean g_hash_table_remove (GHashTable *hash_table,
gconstpointer key);
gboolean g_hash_table_steal (GHashTable *hash_table,
gconstpointer key);
guint g_hash_table_foreach_remove (GHashTable *hash_table,
GHRFunc func,
gpointer user_data);
guint g_hash_table_foreach_steal (GHashTable *hash_table,
GHRFunc func,
gpointer user_data);
void g_hash_table_remove_all (GHashTable *hash_table);
void g_hash_table_steal_all (GHashTable *hash_table);
gboolean (*GHRFunc) (gpointer key,
gpointer value,
gpointer user_data);
#define g_hash_table_freeze (hash_table)
#define g_hash_table_thaw (hash_table)
void g_hash_table_destroy (GHashTable *hash_table);
GHashTable* g_hash_table_ref (GHashTable *hash_table);
void g_hash_table_unref (GHashTable *hash_table);
gboolean g_direct_equal (gconstpointer v1,
gconstpointer v2);
guint g_direct_hash (gconstpointer v);
gboolean g_int_equal (gconstpointer v1,
gconstpointer v2);
guint g_int_hash (gconstpointer v);
gboolean g_str_equal (gconstpointer v1,
gconstpointer v2);
guint g_str_hash (gconstpointer v);
GHashTable обеспечивает связь между ключами и значениями для наиболее быстрого поиска значения полученного ключа.
Помните что не ключи не их значения не копируются при помещении в
GHashTable,
поэтому они должны существовать для жизнеспособности GHashTable.
Это значит использование статических строк допустимо, а временные строки (например создаваемые в буферах и возвращаемые GTK+ виджетами)
должны быть скопированы с помощью g_strdup()
перед вставкой в таблицу.
Если ключи и значения распределяются динамически, вы должны обязательно убедиться в их освобождении после удаления из GHashTable, а также когда они перезаписываются при новой вставке в GHashTable. Также не желательно смешивать статические строки и динамически-распределённые строки в GHashTable, потомучто тогда трудно определить должна ли строка освобождаться.
Для создания GHashTable,
используйте g_hash_table_new().
Для вставки ключа и значения в GHashTable,
используйте g_hash_table_insert().
Для поиска значения соответствующего полученному ключу используйте
g_hash_table_lookup()
и g_hash_table_lookup_extended().
Для удаления ключа и значения, используйте
g_hash_table_remove().
Для вызова функции для каждой пары ключа и значения используйте
g_hash_table_foreach().
Для уничтожения GHashTable используйте
g_hash_table_destroy().
typedef struct _GHashTable GHashTable;
Структура GHashTable является непрозрачной структурой данных представляющей Hash Table. Доступ к ней может осуществляться только функциями описанными ниже.
GHashTable* g_hash_table_new (GHashFunc hash_func, GEqualFunc key_equal_func);
Создаёт новую GHashTable с количеством ссылок равным 1.
hash_func : |
функция для создания хэш значения из ключа. Хеш значения используются для определения места хранения ключей внутри
структуры данных GHashTable.
Функции g_direct_hash(),
g_int_hash() и
g_str_hash()
обеспечивают некоторые основные типы ключей. Если hash_func это
NULL,
то используется g_direct_hash().
|
key_equal_func : |
функция проверяющая эквивалентность двух ключей. Используется при поиске ключа в
GHashTable.
Функции g_direct_equal(),
g_int_equal() и
g_str_equal() обеспечивают основные типы ключей.
Если key_equal_func это
NULL, ключи сравниваются непосредственно в стиле
g_direct_equal(),
но без накладных расходов вызова функции.
|
| Возвращает : | новая GHashTable. |
GHashTable* g_hash_table_new_full (GHashFunc hash_func, GEqualFunc key_equal_func, GDestroyNotify key_destroy_func, GDestroyNotify value_destroy_func);
Создаёт новую GHashTable, похожа на
g_hash_table_new() с количеством ссылок равным 1
и позволяет определять функции для освобождения памяти распределённой для ключа и значения которые получит вызов когда удалит элементы из
GHashTable.
hash_func : |
функция для создания хеш значения из ключа. |
key_equal_func : |
функция для проверки эквивалентности двух ключей. |
key_destroy_func : |
функция освобождающая распределённую память для ключа используемая при удалении элемента из
GHashTable или
NULL если вам
не нужно выполнять такую функцию.
|
value_destroy_func : |
функция освобождающая память, распределённую для значения, используемую при удалении элемента
из GHashTable или
NULL
если вам не нужно выполнять такую функцию.
|
| Возвращает : | новая GHashTable. |
guint (*GHashFunc) (gconstpointer key);
Специальный тип хеш функции которая помещается в
g_hash_table_new()
когда создаётся GHashTable.
В функцию помещается ключ и она должна вернуть хеш значение guint.
Функции g_direct_hash(), g_int_hash() и g_str_hash() обеспечивают
хеш-функции которые могут использоваться когда ключ gpointer, gint и
gchar* соответственно.
ПОПРАВЬТЕ МЕНЯ: Здесь необходимо больше подробностей. Хеш-значения должны быть равномерно распределены по довольно большому диапазону? Модуль берётся с размером хеш таблицы (простое число) для поиска области памяти в которую помещается ключ. Функция должна быть очень быстрой, так как вызывается для каждого разыскиваемого ключа.
key : |
ключ. |
| Возвращает : | хеш значение соответствующее ключу. |
gboolean (*GEqualFunc) (gconstpointer a, gconstpointer b);
Определяет тип функции используемой для проверки эквивалентности двух значений.
Функция должна возвращать TRUE если оба значения эквивалентны
или иначе FALSE.
void g_hash_table_insert (GHashTable *hash_table, gpointer key, gpointer value);
Вставляет новый ключ и значение в GHashTable.
Если ключ уже существует в GHashTable
его текущее значение переписывается новым. Если вы поместите value_destroy_func когда создаёте
GHashTable, старое значение освобождается с помощью этой функции.
Если вы поместите key_destroy_func когда создаёте
GHashTable, помещаемый ключ освобождается с помощью этой функции.
hash_table : |
GHashTable. |
key : |
вставляемый ключ. |
value : |
значение связанное с ключом. |
void g_hash_table_replace (GHashTable *hash_table, gpointer key, gpointer value);
Вставляет новый ключ и значение в GHashTable аналогично
g_hash_table_insert(). Разница в том, что если ключ
уже существует в GHashTable, он переписывается новым значением.
Если вы поместили value_destroy_func когда создавали GHashTable, старое значение освобождается с помощью этой функции. Если вы поместили key_destroy_func когда создавали GHashTable, старый ключ освобождается с помощью этой функции.
hash_table : |
GHashTable. |
key : |
ключ для вставки. |
value : |
значение связываемое с ключом. |
guint g_hash_table_size (GHashTable *hash_table);
Возвращает количество элементов находящихся в GHashTable.
hash_table : |
GHashTable. |
| Возвращает : | количество пар ключ/значение в GHashTable. |
gpointer g_hash_table_lookup (GHashTable *hash_table, gconstpointer key);
Находит ключ в GHashTable.
Помните что эта функция не может отличить ключ который не представлен от ключа который представлен но имеет значение
NULL. Если вам нужно знать о таком различии, используйте
g_hash_table_lookup_extended().
hash_table : |
GHashTable. |
key : |
ключ для поиска. |
| Возвращает : | связанное значение, или NULL если ключ не найден.
|
gboolean g_hash_table_lookup_extended (GHashTable *hash_table, gconstpointer lookup_key, gpointer *orig_key, gpointer *value);
Находит ключ в GHashTable, возвращает оригинальный ключ и
связанное значение gboolean которое
TRUE если ключ был найден.
Это полезно если вам нужно освободить память распределённую для оригинального ключа,
например перед вызовом g_hash_table_remove().
hash_table : |
GHashTable. |
lookup_key : |
ключ для поиска. |
orig_key : |
возвращает оригинальный ключ. |
value : |
возвращает значение связанное с ключом. |
| Возвращает : | TRUE если ключ был найден в
GHashTable.
|
void g_hash_table_foreach (GHashTable *hash_table, GHFunc func, gpointer user_data);
Вызывает полученную функцию для каждой пары ключ/значение в
GHashTable. В функцию помещается ключ и значение каждой пары,
а также параметр user_data. Хеш таблица не может меняться пока функция перемещается через неё
(вы не можете добавлять/удалять элементы). Для удаления всех элементов соответствующих предикату, используйте
g_hash_table_foreach_remove().
hash_table : |
GHashTable. |
func : |
функция вызываемая для каждой пары ключ/значение. |
user_data : |
пользовательские данные помещаемые в функцию. |
gpointer g_hash_table_find (GHashTable *hash_table, GHRFunc predicate, gpointer user_data);
Вызывает полученную функцию для пар клю/значение в GHashTable, пока
predicate не вернёт TRUE. В функцию помещается ключ и значение каждой пары, и полученный параметр user_data.
Хеш таблица не может изменяться пока функция перемещается через неё (вы не можете добавлять/удалять элементы).
hash_table : |
GHashTable. |
predicate : |
функция для проверки каждой пары ключ/значение на определённое свойство. |
user_data : |
пользовательские данные помещаемые в функцию. |
| Возвращает : | Значение первой возвращаемой пары ключ/значение, для которой функция вычислила
TRUE.
Если пара с требуемым свойством не найдена,
возвращается NULL.
|
Начиная с версии 2.4
void (*GHFunc) (gpointer key, gpointer value, gpointer user_data);
Определяет тип функции помещаемойв g_hash_table_foreach().
Она вызывается с каждой парой ключ/значение, вместе с параметром user_data который помещается в
g_hash_table_foreach().
key : |
ключ. |
value : |
значение соответствующее ключу. |
user_data : |
пользовательские данные помещаемые в g_hash_table_foreach().
|
gboolean g_hash_table_remove (GHashTable *hash_table, gconstpointer key);
Удаляет ключ и связанное с ним значение из GHashTable.
Если GHashTable был создан используя
g_hash_table_new_full(),
ключ и значение освобождаются используя вставленную функцию уничтожения, иначе вы должны убедиться что освободили
все динамически распределённые значения самостоятельно.
hash_table : |
GHashTable. |
key : |
удаляемый ключ. |
| Возвращает : | TRUE если ключ был найден и удалён из
GHashTable.
|
gboolean g_hash_table_steal (GHashTable *hash_table, gconstpointer key);
Удаляет ключ и связанное с ним значение из GHashTable, без вызова функции уничтожения ключа и значения.
hash_table : |
GHashTable. |
key : |
ключ для удаления. |
| Возвращает : | TRUE если ключ был найден и удалён из
GHashTable.
|
guint g_hash_table_foreach_remove (GHashTable *hash_table, GHRFunc func, gpointer user_data);
Вызывает полученную функцию для каждой пары ключ/значение в GHashTable.
Если функция вернула TRUE, то ключ/значение удаляется из
GHashTable.
Если ключ или значение помещаются в функцию уничтожения при создании
GHashTable, она используется для освобождения распределённой памяти
удаляемых ключей и значений.
hash_table : |
GHashTable. |
func : |
функция вызываемая для каждой пары ключ/значение. |
user_data : |
пользовательские данные помещаемые в функцию. |
| Возвращает : | количество удаляемых пар ключ/значение. |
guint g_hash_table_foreach_steal (GHashTable *hash_table, GHRFunc func, gpointer user_data);
Вызывает полученную функцию для каждой пары ключ/значение в GHashTable.
Если функция вернула TRUE, то пара ключ/значение удаляется из
GHashTable, но функция уничтожения ключа или значения не вызывается.
hash_table : |
GHashTable. |
func : |
функция вызываемая для каждой пары ключ/значение. |
user_data : |
пользовательские данные помещаемые в функцию. |
| Возвращает : | количество удаляемых пар ключ/значение. |
void g_hash_table_remove_all (GHashTable *hash_table);
Удаляет все ключи и связанные с ними значения из GHashTable.
Если GHashTable была создана с использованием
g_hash_table_new_full(),
ключи и значения освобождаются используя помещённую функцию уничтожения, иначе вы должны убедиться что любые динамически
распределённые значения освободили самостоятельно.
hash_table : |
GHashTable |
Начиная с версии 2.12
void g_hash_table_steal_all (GHashTable *hash_table);
Удаляет все ключи и связанные с ними значения из GHashTable без вызова функции уничтожения ключа и значения.
hash_table : |
GHashTable. |
Начиная с версии 2.12
gboolean (*GHRFunc) (gpointer key, gpointer value, gpointer user_data);
Определяет тип функции помещаемой в g_hash_table_foreach_remove().
Она вызывается с каждой парой ключ/значение, вместе с параметром user_data помещённым в
g_hash_table_foreach_remove().
Она должна вернуть TRUE если пара ключ/значение должна быть удалена из GHashTable.
key : |
ключ. |
value : |
значение связанное с ключом. |
user_data : |
пользовательские данные помещаемые в g_hash_table_remove().
|
| Возвращает : |
TRUE если пара ключ/значение должна быть удалена из GHashTable.
|
#define g_hash_table_freeze(hash_table)
g_hash_table_freeze устарела и не должна использоваться во вновь создаваемом коде.
Эта функция устарела и будет удалена в следующих релизах GLib. Она ничего не делает.
hash_table : |
GHashTable |
#define g_hash_table_thaw(hash_table)
g_hash_table_thaw устарела и не должна использоваться во вновь создаваемом коде.
Эта функция устарела и будет удалена в следующих релизах GLib. Она ничего не делает.
hash_table : |
GHashTable |
void g_hash_table_destroy (GHashTable *hash_table);
Уничтожает все ключи и значения в GHashTable и уменьшает количество её ссылок на 1. Если ключи и/или значения распределены динамически,
вы должны либо освободить сначала их или создать GHashTable
с уничтожающим уведомлением используя g_hash_table_new_full(). В последнем случае функция уничтожения, помещённая вами, будет вызвана для всех ключей и значений в течении фазы разрушения.
hash_table : |
GHashTable. |
GHashTable* g_hash_table_ref (GHashTable *hash_table);
Автоматически увеличивает количество ссылок hash_table на одну.
Эта функция MT-безопасна и может быть вызвана из любого потока.
hash_table : |
правильная GHashTable. |
| Возвращает : | передачу в GHashTable. |
Начиная с версии 2.10
void g_hash_table_unref (GHashTable *hash_table);
Автоматически уменьшает количество ссылок hash_table на одну.
Если количество ссылок сброшено до 0, все ключи и значения будут уничтожены, а вся память, распределённая
для хеш таблицы, освобождена.
Эта функция MT-безопасна и может быть вызвана из любого потока.
hash_table : |
правильная GHashTable. |
Начиная с версии 2.10
gboolean g_direct_equal (gconstpointer v1, gconstpointer v2);
Сравнивает два аргумента gpointer и возвращает
TRUE если они равны.
Она может быть помещена в g_hash_table_new()
как параметр key_equal_func,
используя в качестве указателя ключ в GHashTable.
v1 : |
ключ. |
v2 : |
ключ для сравнения с v1.
|
| Возвращает : | TRUE если два ключа равны.
|
guint g_direct_hash (gconstpointer v);
Конвертирует gpointer в хеш значение.
Она может быть помещена в g_hash_table_new()
как параметр hash_func,
используя в качестве указателя ключ в GHashTable.
v : |
gpointer key |
| Возвращает : | хеш значение соответствующее ключу. |
gboolean g_int_equal (gconstpointer v1, gconstpointer v2);
Сравнивает два значения gint и возвращает
TRUE если они равны.
Она может быть помещена в g_hash_table_new()
как параметр key_equal_func, используя в качестве указателей на целочисленные ключи в
GHashTable.
guint g_int_hash (gconstpointer v);
Конвертирует указатель на gint в хеш значение.
Она может быть помещена в g_hash_table_new()
как параметр hash_func,
используя в качестве указателей на целочисленные значения ключи в GHashTable.
v : |
указатель на gint ключ |
| Возвращает : | хеш значение соответствующее ключу. |
gboolean g_str_equal (gconstpointer v1, gconstpointer v2);
Сравнивает две строки и возвращает TRUE если они равны.
Она может быть помещена в g_hash_table_new()
как параметр key_equal_func, используя в качестве строк ключи в GHashTable.
v1 : |
ключ. |
v2 : |
ключ для сравнения с v1.
|
| Возвращает : | TRUE если два ключа равны.
|
guint g_str_hash (gconstpointer v);
Конвертирует строку в хеш значение.
Она может помещаться в g_hash_table_new()
как параметр hash_func,
используя в качестве строки ключ в GHashTable.
v : |
строка ключ. |
| Возвращает : | хеш значение соответствующее ключу. |
|
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |