Справочное описание GLib | ||||
---|---|---|---|---|
#include <glib.h>
GCache;
GCache* g_cache_new (GCacheNewFunc value_new_func,
GCacheDestroyFunc value_destroy_func,
GCacheDupFunc key_dup_func,
GCacheDestroyFunc key_destroy_func,
GHashFunc hash_key_func,
GHashFunc hash_value_func,
GEqualFunc key_equal_func);
gpointer g_cache_insert (GCache *cache,
gpointer key);
void g_cache_remove (GCache *cache,
gconstpointer value);
void g_cache_destroy (GCache *cache);
void g_cache_key_foreach (GCache *cache,
GHFunc func,
gpointer user_data);
void g_cache_value_foreach (GCache *cache,
GHFunc func,
gpointer user_data);
void (*GCacheDestroyFunc) (gpointer value);
gpointer (*GCacheDupFunc) (gpointer value);
gpointer (*GCacheNewFunc) (gpointer key);
GCache позволяет объединить комплекс структур данных, в порядке сохранения системных ресурсов.
GTK+ использует кеши для GtkStyles и GdkGCs. Они потребляют много ресурсов, поэтому GCache используется для отслеживания ситуации когда GtkStyle или GdkGC запрашивают уже существующие свойства. Если это выполнено, то используются существующие объекты вместо создания новых.
GCache использует ключи и значения. GCache ключ описывает свойство специального ресурса. GCache значение - это фактический ресурс.
typedef struct _GCache GCache;
Структура GCache является непрозрачной структурой данных содержащей информацию о GCache. Доступ к ней должен осуществляться только через следующие функции.
GCache* g_cache_new (GCacheNewFunc value_new_func,
GCacheDestroyFunc value_destroy_func,
GCacheDupFunc key_dup_func,
GCacheDestroyFunc key_destroy_func,
GHashFunc hash_key_func,
GHashFunc hash_value_func,
GEqualFunc key_equal_func);
Создаёт новую GCache.
value_new_func : |
функция для создания нового объекта данного ключа.
Она вызывается функцией g_cache_insert()
если объект с данным ключом ещё не существует.
|
value_destroy_func : |
функция для уничтожения объекта. Она вызывается с помощью
g_cache_remove()
когда объект больше не нужен (то есть количество его ссылок сброшено в 0).
|
key_dup_func : |
функция для копирования ключа. Она вызывается функцией
g_cache_insert()
если ключ ещё не существует в GCache.
|
key_destroy_func : |
функция для уничтожения ключа. Она вызывается функцией
g_cache_remove()
когда объект больше не нужен (то есть количество его ссылок сброшено в 0).
|
hash_key_func : |
функция создаёт хеш значение из ключа. |
hash_value_func : |
функция создаёт хеш значение из значения. |
key_equal_func : |
функция для сравнения двух ключей. Она должна вернуть TRUE
если два ключа равны.
|
Возвращает : | новая GCache. |
gpointer g_cache_insert (GCache *cache,
gpointer key);
Определяет значение соответствующее полученному ключу, создаёт если необходимо.
Она сначала проверяет существует ли значение в GCache,
используя key_equal_func
функцию помещённую в
g_cache_new()
.
Если существует, возвращает это значение и увеличивает количество ссылок на одну.
Если значение не существует в текущий момент, оно создаётся вызовом value_new_func
.
Ключ дублируется вызовом key_dup_func
и дубликат ключа и значения вставляется в
GCache.
void g_cache_remove (GCache *cache,
gconstpointer value);
Уменьшает количество ссылок на указанное значение.
Если сброшено в 0, то значение и соответствующий ключ уничтожаются,
используя value_destroy_func
и key_destroy_func
помещённые в g_cache_new()
.
cache : |
GCache. |
value : |
значение для удаления. |
void g_cache_destroy (GCache *cache);
Освобождает память распределённую для GCache.
Помните что она не уничтожает ключи и значения которые содержит GCache.
cache : |
GCache. |
void g_cache_key_foreach (GCache *cache,
GHFunc func,
gpointer user_data);
Вызывает указанную функцию для каждого ключа в GCache.
func
принимает три параметра, значение и ключ кеш элемента и
user_data
. Порядок значение и ключ отличается от порядка в котором
g_hash_table_foreach()
проходит пары ключ/значение
в callback-функцию!
void g_cache_value_foreach (GCache *cache,
GHFunc func,
gpointer user_data);
g_cache_value_foreach
устарела начиная с версии 2.10 и не должна использоваться во вновь создаваемом коде.
Благоразумней поместить указатели для внутренних структур данных в func
;
используя g_cache_key_foreach()
Вызывает указанную функцию для каждого значения в GCache.
void (*GCacheDestroyFunc) (gpointer value);
Определяет тип value_destroy_func
и key_destroy_func
функций
помещаемых в g_cache_new()
.
В функции помещаются указатели на GCache ключ или GCache значение и она должна освободить любую память и другие ресурсы связанные с ними.
value : |
GCache значение для уничтожения. |
gpointer (*GCacheDupFunc) (gpointer value);
Определяет тип key_dup_func
функции помещаемой в
g_cache_new()
.
В функцию помещается ключ (не значение, поскольку подразумевается образец)
и она должна вернуть копию ключа.