Caches

Caches — Кеши позволяют объединять комплекс структур данных для сохранения ресурсов.

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

#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 значение - это фактический ресурс.

Детали

GCache

typedef struct _GCache GCache;

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


g_cache_new ()

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.

g_cache_insert ()

gpointer g_cache_insert (GCache *cache, gpointer key);

Определяет значение соответствующее полученному ключу, создаёт если необходимо. Она сначала проверяет существует ли значение в GCache, используя key_equal_func функцию помещённую в g_cache_new(). Если существует, возвращает это значение и увеличивает количество ссылок на одну. Если значение не существует в текущий момент, оно создаётся вызовом value_new_func. Ключ дублируется вызовом key_dup_func и дубликат ключа и значения вставляется в GCache.

cache : GCache.
key : ключ описывающий GCache объект.
Возвращает : указатель на GCache значение.

g_cache_remove ()

void g_cache_remove (GCache *cache, gconstpointer value);

Уменьшает количество ссылок на указанное значение. Если сброшено в 0, то значение и соответствующий ключ уничтожаются, используя value_destroy_func и key_destroy_func помещённые в g_cache_new().

cache : GCache.
value : значение для удаления.

g_cache_destroy ()

void g_cache_destroy (GCache *cache);

Освобождает память распределённую для GCache.

Помните что она не уничтожает ключи и значения которые содержит GCache.

cache : GCache.

g_cache_key_foreach ()

void g_cache_key_foreach (GCache *cache, GHFunc func, gpointer user_data);

Вызывает указанную функцию для каждого ключа в GCache.

Примечание

func принимает три параметра, значение и ключ кеш элемента и user_data. Порядок значение и ключ отличается от порядка в котором g_hash_table_foreach() проходит пары ключ/значение в callback-функцию!

cache : GCache.
func : функция вызываемая с каждым элементом GCache key.
user_data : пользовательские данные помещаемые в функцию.

g_cache_value_foreach ()

void g_cache_value_foreach (GCache *cache, GHFunc func, gpointer user_data);

Внимание

g_cache_value_foreach устарела начиная с версии 2.10 и не должна использоваться во вновь создаваемом коде. Благоразумней поместить указатели для внутренних структур данных в func; используя g_cache_key_foreach()

Вызывает указанную функцию для каждого значения в GCache.

cache : GCache.
func : функция вызываемая с каждым значением GCache.
user_data : пользовательские данные помещаемые в функцию.

GCacheDestroyFunc ()

void (*GCacheDestroyFunc) (gpointer value);

Определяет тип value_destroy_func и key_destroy_func функций помещаемых в g_cache_new(). В функции помещаются указатели на GCache ключ или GCache значение и она должна освободить любую память и другие ресурсы связанные с ними.

value : GCache значение для уничтожения.

GCacheDupFunc ()

gpointer (*GCacheDupFunc) (gpointer value);

Определяет тип key_dup_func функции помещаемой в g_cache_new(). В функцию помещается ключ (не значение, поскольку подразумевается образец) и она должна вернуть копию ключа.

value : GCache ключ для уничтожения (не GCache значение).
Возвращает : копия GCache ключа.

GCacheNewFunc ()

gpointer (*GCacheNewFunc) (gpointer key);

Определяет тип value_new_func функции помещаемой в g_cache_new(). Она берёт GCache ключ и должна создать значение соответствующее ключу.

key : GCache key.
Возвращает : новое GCache значение соответствующее ключу.