CVS update: php3/functions

From: Date: Tue, 06 Oct 1998 21:17:49 +0000
Subject: CVS update: php3/functions
Groups: php.dev 
Request: Send a blank email to php-dev+get-1709@lists.php.net to get a copy of this message
Date: Tuesday October 6, 1998 @ 17:17 Author: martin Update of /repository/php3/functions In directory asf:/u2/tmp/cvs-serv26508 Modified Files: gdcache.h Log Message: I'm terribly sorry! I committed the empty file by mistake. Here's the correct and complete version again. Index: php3/functions/gdcache.h diff -c php3/functions/gdcache.h:1.2 php3/functions/gdcache.h:1.3 *** php3/functions/gdcache.h:1.2 Tue Oct 6 05:44:19 1998 --- php3/functions/gdcache.h Tue Oct 6 17:17:47 1998 *************** *** 0 **** --- 1,83 ---- + /* + * gdcache.h + * + * Caches of pointers to user structs in which the least-recently-used + * element is replaced in the event of a cache miss after the cache has + * reached a given size. + * + * John Ellson (ellson@lucent.com) Oct 31, 1997 + * + * Test this with: + * gcc -o gdcache -g -Wall -DTEST gdcache.c + * + * The cache is implemented by a singly-linked list of elements + * each containing a pointer to a user struct that is being managed by + * the cache. + * + * The head structure has a pointer to the most-recently-used + * element, and elements are moved to this position in the list each + * time they are used. The head also contains pointers to three + * user defined functions: + * - a function to test if a cached userdata matches some keydata + * - a function to provide a new userdata struct to the cache + * if there has been a cache miss. + * - a function to release a userdata struct when it is + * no longer being managed by the cache + * + * In the event of a cache miss the cache is allowed to grow up to + * a specified maximum size. After the maximum size is reached then + * the least-recently-used element is discarded to make room for the + * new. The most-recently-returned value is always left at the + * beginning of the list after retrieval. + * + * In the current implementation the cache is traversed by a linear + * search from most-recent to least-recent. This linear search + * probably limits the usefulness of this implementation to cache + * sizes of a few tens of elements. + */ + + /*********************************************************/ + /* header */ + /*********************************************************/ + + #include <malloc.h> + #ifndef NULL + #define NULL (void *)0 + #endif + + /* user defined function templates */ + typedef int (*gdCacheTestFn_t)(void *userdata, void *keydata); + typedef void *(*gdCacheFetchFn_t)(char **error, void *keydata); + typedef void (*gdCacheReleaseFn_t)(void *userdata); + + /* element structure */ + typedef struct gdCache_element_s gdCache_element_t; + struct gdCache_element_s { + gdCache_element_t *next; + void *userdata; + }; + + /* head structure */ + typedef struct gdCache_head_s gdCache_head_t; + struct gdCache_head_s { + gdCache_element_t *mru; + int size; + char *error; + gdCacheTestFn_t gdCacheTest; + gdCacheFetchFn_t gdCacheFetch; + gdCacheReleaseFn_t gdCacheRelease; + }; + + /* function templates */ + gdCache_head_t * + gdCacheCreate( + int size, + gdCacheTestFn_t gdCacheTest, + gdCacheFetchFn_t gdCacheFetch, + gdCacheReleaseFn_t gdCacheRelease ); + + void + gdCacheDelete( gdCache_head_t *head ); + + void * + gdCacheGet( gdCache_head_t *head, void *keydata ); -- PHP Development Mailing List http://www.php.net/ To unsubscribe send an empty message to php-dev-unsubscribe@lists.php.net For help: php-dev-help@lists.php.net

« previous php.dev (#1709) next »