Name
Caches -- allows sharing of complex data structures to save resources.
Synopsis
#include <glib.h>
struct 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,
GCompareFunc key_compare_func);
gpointer g_cache_insert (GCache *cache,
gpointer key);
void g_cache_remove (GCache *cache,
gpointer 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); |
Description
A GCache allows sharing of complex data structures, in order to save
system resources.
GTK uses a GCache for both GtkStyles and GdkGCs. These consume a lot of
resouces, so a GCache is used to see if a GtkStyle or GdkGC with the
required properties already exists. If it does, then the existing
GtkStyle or GdkGC is used instead of creating a new one.
GCache uses keys and values.
A GCache key describes the properties of a particular resource.
A GCache value is the actual resource.
Details
struct GCache
The GCache struct is an opaque data structure containing information about
a GCache. It should only be accesssed via the following functions.
g_cache_new ()
Creates a new GCache.
g_cache_insert ()
Gets the value corresponding to the given key, creating it if necessary.
It first checks if the value already exists in the GCache, by using
the key_compare_func function passed to g_cache_new().
If it does already exist it is returned, and its reference count is increased
by one.
If the value does not currently exist, if is created by calling the
value_new_func. The key is duplicated by calling
key_dup_func and the duplicated key and value are inserted
into the GCache.
g_cache_remove ()
Decreases the reference count of the given value.
If it drops to 0 then the value and its corresponding key are destroyed,
using the value_destroy_func and key_destroy_func passed to g_cache_new().
g_cache_destroy ()
void g_cache_destroy (GCache *cache); |
Frees the memory allocated for the GCache.
Note that it does not destroy the keys and values which were contained in the
GCache.
g_cache_key_foreach ()
Calls the given function for each of the keys in the GCache.
g_cache_value_foreach ()
Calls the given function for each of the values in the GCache.
GCacheDestroyFunc ()
void (*GCacheDestroyFunc) (gpointer value); |
Specifies the type of the value_destroy_func and key_destroy_func functions
passed to g_cache_new().
The functions are passed a pointer to the GCache key or GCache value and
should free any memory and other resources associated with it.
GCacheDupFunc ()
Specifies the type of the key_dup_func function passed to g_cache_new().
The function is passed a key (NOT a value as the prototype implies) and
should return a duplicate of the key.
GCacheNewFunc ()
Specifies the type of the value_new_func function passed to g_cache_new().
It is passed a GCache key and should create the value corresponding to the
key.