diff options
author | Alan Coopersmith <alan.coopersmith@oracle.com> | 2013-01-19 22:50:11 -0800 |
---|---|---|
committer | Alan Coopersmith <alan.coopersmith@oracle.com> | 2013-01-19 22:50:11 -0800 |
commit | b736a278a574a0f5f24c207478974351573427bc (patch) | |
tree | 1e5a7d36e937126b838312bae98d65f249422ef9 | |
parent | 21e479609b3529ce24e6139d1208dfe4f9040891 (diff) |
Remove unused server cache functionality
We initialized the cache & reset the cache, but never put anything in it.
(Unlike the FontPatternCache provided by libXfont.)
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
-rw-r--r-- | Makefile.am | 3 | ||||
-rw-r--r-- | difs/cache.c | 382 | ||||
-rw-r--r-- | difs/dispatch.c | 2 | ||||
-rw-r--r-- | difs/main.c | 7 | ||||
-rw-r--r-- | doc/xfs-design.xml | 137 | ||||
-rw-r--r-- | include/cache.h | 71 | ||||
-rw-r--r-- | include/cachestr.h | 74 |
7 files changed, 0 insertions, 676 deletions
diff --git a/Makefile.am b/Makefile.am index 490b52a..d07ce8a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -36,7 +36,6 @@ LDADD = $(XFS_LIBS) xfs_SOURCES = \ difs/atom.c \ - difs/cache.c \ difs/charinfo.c \ difs/difsutils.c \ difs/dispatch.c \ @@ -68,8 +67,6 @@ xfs_SOURCES = \ include/assert.h \ include/auth.h \ include/authstr.h \ - include/cache.h \ - include/cachestr.h \ include/client.h \ include/clientstr.h \ include/closestr.h \ diff --git a/difs/cache.c b/difs/cache.c deleted file mode 100644 index 06fca6c..0000000 --- a/difs/cache.c +++ /dev/null @@ -1,382 +0,0 @@ -/* -Copyright 1987, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - * Copyright 1990, 1991 Network Computing Devices; - * Portions Copyright 1987 by Digital Equipment Corporation - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the names of Network Computing Devices, - * or Digital not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. Network Computing Devices, or Digital - * make no representations about the - * suitability of this software for any purpose. It is provided "as is" - * without express or implied warranty. - * - * NETWORK COMPUTING DEVICES, AND DIGITAL DISCLAIM ALL WARRANTIES WITH - * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES, OR DIGITAL BE - * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - */ - -#include "config.h" - -#include "cachestr.h" -#include "misc.h" - -#define INITBUCKETS 64 -#define INITHASHSIZE 6 -#define MAXHASHSIZE 11 - - -#define ENTRYOFFSET 22 -#define CACHE_ENTRY_MASK 0x3FFFFF -#define CACHE_ENTRY_BITS(id) ((id) & 0x1fc00000) -#define CACHE_ID(id) ((int)(CACHE_ENTRY_BITS(id) >> ENTRYOFFSET)) - -#define NullCacheEntry ((CacheEntryPtr) 0) - -#define MAX_NUM_CACHES 32 -/* XXX make this dynamic? */ -static CachePtr caches[MAX_NUM_CACHES]; -static int num_caches = 1; - -/*- - * Notes on cache implementation - * - * This is basically the X11 resource code, with some modifications - * to handle aging. - * - * Its currently optimized for lookup & store. Flushing old stuff - * is a lot slower than it should probably be, but there's tradeoffs - * in tuning. - */ - -Cache -CacheInit(unsigned long maxsize) -{ - Cache id = (Cache) num_caches; - CachePtr cache; - - cache = (CachePtr) fsalloc(sizeof(CacheRec)); - if (!cache) - return (Cache) 0; - cache->entries = (CacheEntryPtr *) - fsalloc(INITBUCKETS * sizeof(CacheEntryPtr)); - bzero((char *) cache->entries, (INITBUCKETS * sizeof(CacheEntryPtr))); - if (!cache->entries) { - fsfree(cache); - return (Cache) 0; - } - caches[id] = cache; - cache->elements = 0; - cache->buckets = INITBUCKETS; - cache->hashsize = INITHASHSIZE; - cache->maxsize = maxsize; - cache->cursize = 0; - cache->nextid = id << ENTRYOFFSET; - cache->id = id; - num_caches++; - return id; -} - -static int -hash(CacheID cid) -{ - CachePtr cache = caches[CACHE_ID(cid)]; - - switch (cache->hashsize) { -#ifdef DEBUG /* only need this if INITHASHSIZE < 6 */ - case 2: - return ((int) (0x03 & (cid ^ (cid >> 2) ^ (cid >> 8)))); - case 3: - return ((int) (0x07 & (cid ^ (cid >> 3) ^ (cid >> 9)))); - case 4: - return ((int) (0x0F & (cid ^ (cid >> 4) ^ (cid >> 10)))); - case 5: - return ((int) (0x01F & (cid ^ (cid >> 5) ^ (cid >> 11)))); -#endif - case 6: - return ((int) (0x03F & (cid ^ (cid >> 6) ^ (cid >> 12)))); - case 7: - return ((int) (0x07F & (cid ^ (cid >> 7) ^ (cid >> 13)))); - case 8: - return ((int) (0x0FF & (cid ^ (cid >> 8) ^ (cid >> 16)))); - case 9: - return ((int) (0x1FF & (cid ^ (cid >> 9)))); - case 10: - return ((int) (0x3FF & (cid ^ (cid >> 10)))); - case 11: - return ((int) (0x7FF & (cid ^ (cid >> 11)))); - } - return -1; -} - -static void -rebuild_cache(CachePtr cache) -{ - int j; - CacheEntryPtr cp, - next, - **tails, - *entries, - **tptr, - *cptr; - - assert(cache); - j = 2 * cache->buckets; - tails = (CacheEntryPtr **) ALLOCATE_LOCAL(j * sizeof(CacheEntryPtr *)); - if (!tails) - return; - entries = (CacheEntryPtr *) fsalloc(j * sizeof(CacheEntryPtr)); - if (!entries) { - DEALLOCATE_LOCAL(tails); - return; - } - for (cptr = entries, tptr = tails; --j >= 0; cptr++, tptr++) { - *cptr = NullCacheEntry; - *tptr = cptr; - } - cache->hashsize++; - for (j = cache->buckets, cptr = cache->entries; --j >= 0; cptr++) { - for (cp = *cptr; cp; cp = next) { - next = cp->next; - cp->next = NullCacheEntry; - tptr = &tails[hash(cp->id)]; - **tptr = cp; - *tptr = &cp->next; - } - } - DEALLOCATE_LOCAL(tails); - cache->buckets *= 2; - fsfree(cache->entries); - cache->entries = entries; -} - -/* - * throws out all existing entries - */ -void -CacheReset(void) -{ - CacheEntryPtr cp; - CachePtr cache; - int i, - j; - - for (j = 0; j < num_caches; j++) { - cache = caches[j]; - if (!cache) - continue; - for (i = 0; i < cache->buckets; i++) { - for (cp = cache->entries[i]; cp; cp = cp->next) { - cache->elements--; - cache->cursize -= cp->size; - (*cp->free_func) (cp->id, cp->data, CacheWasReset); - fsfree(cp); - } - cache->entries[i] = (CacheEntryPtr) 0; - } - assert(cache->cursize == 0); - } -} - -static void -flush_cache(CachePtr cache, unsigned long needed) -{ -/* XXX -- try to set oldprev properly inside search loop */ - CacheEntryPtr cp, - oldest, - *oldprev; - int oldbucket = -1, - i; - - while ((cache->cursize + needed) > cache->maxsize) { - oldest = (CacheEntryPtr) 0; - /* find oldest */ - for (i = 0; i < cache->buckets; i++) { - cp = cache->entries[i]; - if (!cp) - continue; - if (!oldest) { - oldbucket = i; - oldest = cp; - } - while (cp) { - if (cp->timestamp < oldest->timestamp) { - oldest = cp; - oldbucket = i; - } - cp = cp->next; - } - } - /* fixup list */ - oldprev = &cache->entries[oldbucket]; - cp = *oldprev; - for (; (cp = *oldprev) != NULL; oldprev = &cp->next) { - if (cp == oldest) { - *oldprev = oldest->next; - break; - } - } - /* clobber it */ - cache->elements--; - cache->cursize -= oldest->size; - (*oldest->free_func) (oldest->id, oldest->data, CacheEntryOld); - fsfree(oldest); - } -} - -void -CacheResize(Cache cid, unsigned newsize) -{ - CachePtr cache = caches[cid]; - - if (!cache) - return; - - if (newsize < cache->maxsize) { - /* have to toss some stuff */ - flush_cache(cache, cache->maxsize - newsize); - } - cache->maxsize = newsize; -} - -CacheID -CacheStoreMemory( - Cache cid, - pointer data, - unsigned long size, - CacheFree free_func) -{ - CacheID id; - CacheEntryPtr cp, - *head; - CachePtr cache = caches[cid]; - - if (size > cache->maxsize) /* beyond cache limits */ - return (CacheID) 0; - - if ((cache->elements >= 4 * cache->buckets) && - (cache->hashsize < MAXHASHSIZE)) { - rebuild_cache(cache); - } - id = cache->nextid++; - - if ((cache->cursize + size) > cache->maxsize) { - flush_cache(cache, size); - } - head = &cache->entries[hash(id)]; - cp = (CacheEntryPtr) fsalloc(sizeof(CacheEntryRec)); - if (!cp) { - return (CacheID) 0; - } - cp->next = *head; - cp->id = id; - cp->timestamp = GetTimeInMillis(); - cp->free_func = free_func; - cp->size = size; - cp->data = data; - cache->cursize += size; - cache->elements++; - *head = cp; - - return id; -} - -pointer -CacheFetchMemory( - CacheID cid, - Bool update) -{ - CachePtr cache = caches[CACHE_ID(cid)]; - CacheEntryPtr cp, - *head; - - head = &cache->entries[hash(cid)]; - for (cp = *head; cp; cp = cp->next) { - if (cp->id == cid) { - if (update) { - cp->timestamp = GetTimeInMillis(); - if (cp != *head) { /* put it in the front */ - cp->next = *head; - *head = cp; - } - } - return cp->data; - } - } - return (pointer) 0; -} - -void -CacheFreeMemory( - CacheID cid, - Bool notify) -{ - CachePtr cache = caches[CACHE_ID(cid)]; - CacheEntryPtr cp, - *prev, - *head; - int *elptr; - int elements; - Bool found = FALSE; - - head = &cache->entries[hash(cid)]; - elptr = &cache->elements; - prev = head; - while ((cp = *prev) != NullCacheEntry) { - if (cp->id == cid) { - *prev = cp->next; - elements = --*elptr; - if (notify) { - (*(cp->free_func)) (cid, cp->data, CacheEntryFreed); - } - cache->cursize -= cp->size; - fsfree(cp); - if (*elptr != elements) - prev = head; - found = TRUE; - } else { - prev = &cp->next; - } - } - if (!found) - FatalError("freeing cache entry %ld which isn't there\n", cid); -} - -/* ARGSUSED */ -void -CacheSimpleFree( - CacheID cid, - pointer data, - int reason) -{ - fsfree(data); -} diff --git a/difs/dispatch.c b/difs/dispatch.c index f22ec36..6f8b2b6 100644 --- a/difs/dispatch.c +++ b/difs/dispatch.c @@ -65,7 +65,6 @@ in this Software without prior written authorization from The Open Group. #include <X11/fonts/fontstruct.h> #include "site.h" #include "fsevents.h" -#include "cache.h" #include "globals.h" #include "difs.h" #include "access.h" @@ -168,7 +167,6 @@ Dispatch(void) /* flush all the caches */ if (dispatchException & DE_FLUSH) { NoticeF("flushing all caches\n"); - CacheReset(); dispatchException &= ~DE_FLUSH; } /* reset */ diff --git a/difs/main.c b/difs/main.c index 9e8e957..a202a53 100644 --- a/difs/main.c +++ b/difs/main.c @@ -58,7 +58,6 @@ in this Software without prior written authorization from The Open Group. #include "misc.h" #include "globals.h" #include "servermd.h" -#include "cache.h" #include "site.h" #include "dispatch.h" #include "extentst.h" @@ -67,10 +66,6 @@ in this Software without prior written authorization from The Open Group. char *ConnectionInfo; int ConnInfoLen; -Cache serverCache; - -#define SERVER_CACHE_SIZE 10000 /* for random server cacheables */ - static Bool create_connection_block(void); char *configfilename; @@ -109,7 +104,6 @@ main(int argc, char *argv[]) OsInit(); if (serverGeneration == 1) { /* do first time init */ - serverCache = CacheInit(SERVER_CACHE_SIZE); CreateSockets(OldListenCount, OldListen); InitProcVectors(); clients = (ClientPtr *) fsalloc(MAXCLIENTS * sizeof(ClientPtr)); @@ -152,7 +146,6 @@ main(int argc, char *argv[]) #endif /* clean up per-cycle stuff */ - CacheReset(); CloseDownExtensions(); if ((dispatchException & DE_TERMINATE) || drone_server) break; diff --git a/doc/xfs-design.xml b/doc/xfs-design.xml index b6352dd..7606d88 100644 --- a/doc/xfs-design.xml +++ b/doc/xfs-design.xml @@ -1043,143 +1043,6 @@ fsResolution *GetClientResolutions(int *<parameter>num_resolutions</parameter>) Returns the list of resolutions that the current client has set.</para> </sect2> <sect2> - <title>Caching functions</title> - - <para>These are functions that simplify caching of renderer - data. These are for use by renderers that take significant - resources to produce data. The data must be re-creatable -- the - cache is not meant for general storage. The data may also be - moved by the cache, so it should only be accessed by - CacheID.</para> - - <para><synopsis> -typedef void (*CacheFree)(); -typedef unsigned long CacheID; -typedef unsigned long Cache; - -Cache CacheInit(int <parameter>renderer_id</parameter>) - </synopsis> - - - Initializes a cache object for the renderer. the returned - ID should be passed to <function>CacheStoreMemory()</function> - when adding an object to the cache.</para> - - <para><synopsis> -void CacheStats(Cache <parameter>cid</parameter>, unsigned long *<parameter>num_entries</parameter>, - unsigned long *<parameter>max_storage</parameter>, unsigned long *<parameter>current_storage</parameter>, - unsigned long *<parameter>num_lookups</parameter>, unsigned long *<parameter>hit_ratio</parameter>) - </synopsis> - - - Returns statistics on the cache. Useful if the renderer - wants some hints about whether to place an object in the cache. - If the cache is nearly full, and the priority low, it may want - to take different action.</para> - - <para><synopsis> -CacheID CacheStoreMemory(Cache <parameter>cacheid</parameter>, pointer <parameter>data</parameter>, unsigned long <parameter>size</parameter>, - CacheFree <parameter>free_func</parameter>) - </synopsis> - - - The renderer hands the cache some chunk of contiguous - memory, which the cache timestamps and stores. When it needs to - remove them, it calls the - <parameter class="function">free_func</parameter>, which must - take responsibility for properly freeing the data. - <parameter class="function">size</parameter> is primarily a hint - to the cache, so that cache limits can be properly calculated. A - return value of zero means the store failed, probably because - the given size was over the cache limit. If the given data is - too large for the current cache, it will attempt to free old - data to make room. The returned ID is a unique value that refers - both to the object and the cache in which it was placed.</para> - - <para><synopsis> -pointer CacheFetchMemory(CacheID <parameter>cid</parameter>, Bool <parameter>update</parameter>) - </synopsis> - - - Returns the memory attached to the id. If - <parameter class="function">update</parameter> is set, the - timestamp is updated. (Some accesses may wish to be 'silent', - which allows some control over the freeing scheduling.) If the - cid is invalid, <constant>NULL</constant> is returned.</para> - - <para><synopsis> -pointer CacheFetchMemory(CacheID <parameter>cid</parameter>, Bool <parameter>update</parameter>) - </synopsis> - - - Allows the cache to flush the data. If - <emphasis remap='I'>notify</emphasis> is set, the CacheFree - function passed in when the data was cached will also be - called.</para> - - <para><synopsis> -void MemoryFreed(CacheID <parameter>cid</parameter>, pointer <parameter>data</parameter>, int <parameter>reason</parameter>) - </synopsis> - - - Callback function from the cache to the renderer notifying - it that its data has been flushed. This function then has the - responsibility to free that data. - <parameter class="function">reason</parameter> may be one of: - - <synopsis> -CacheReset /* all cache freed because of server reset */ -CacheEntryFreed /* explicit request via free_memory() */ -CacheEntryOld /* cache hit limit, and memory being freed because its old */ - </synopsis> - - - and is supplied so that the renderer may choose how to - deal with the free request. (It will probably be ignored by - most, but some may want to keep the memory around by bypassing - the cache, or re-inserting it.) Note that the cache will - consider the data gone, so it <emphasis remap='B'>must</emphasis> - be re-inserted to keep it alive.</para> - - <para><synopsis> -void CacheSimpleFree(CacheID <parameter>cid</parameter>, pointer <parameter>data</parameter>, int <parameter>reason</parameter>) - </synopsis> - - - Just calls <function>free()</function> on the data. Simple - CacheFree defined here to prevent it being redefined in each - renderer.</para> - - <para>Typical usage of the cache is for the renderer to store a - CacheID rather than a pointer to the cacheable data. The - renderer is responsible for both allocating and freeing the - data, as well as keeping track of just what it is. When the - renderer needs the cached data, it will request it from the - cache. If it fails, it must rebuild it.</para> - - <para>A possible configuration parameter is the size of the - cache. when the cache is filled (with the calculation based on - the given size), it sweeps the cache and frees old data. The - amount of memory actually freed may wish to be tunable: some - systems may want to keep the cache as full as possible, others - may want to free some percentage such that sweeps occur less - frequently.</para> - - <para>Cache statistics may want to be available for - administrators. They could be dumped to a file when a signal is - received. (SNMP seems like a perfect match, but apparently the - technology isn't there yet.)</para> - - <para>Cached data could also be compressed, if the memory/CPU - tradeoffs make it worthwhile.</para> - - <note><title>ISSUE: Is a time-based freeing schedule sufficient?</title> - <para>Should priorities or size also be taken into account? [ No. - Anything that the renderer thinks should have a higher priority - should probably not be placed into the cache. ]</para></note> - - </sect2> - <sect2> <title>Byte swapping</title> <para>Functions for swapping a 4-byte quantity, a 2-byte diff --git a/include/cache.h b/include/cache.h deleted file mode 100644 index 254dd49..0000000 --- a/include/cache.h +++ /dev/null @@ -1,71 +0,0 @@ -/* -Copyright 1987, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - * Copyright 1990, 1991 Network Computing Devices; - * Portions Copyright 1987 by Digital Equipment Corporation - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the names of Network Computing Devices, - * or Digital not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. Network Computing Devices, or Digital - * make no representations about the - * suitability of this software for any purpose. It is provided "as is" - * without express or implied warranty. - * - * NETWORK COMPUTING DEVICES, AND DIGITAL DISCLAIM ALL WARRANTIES WITH - * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES, DIGITAL OR MIT BE - * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - */ - -#ifndef _CACHE_H_ -#define _CACHE_H_ - -#include "misc.h" - -#define CacheWasReset 1 -#define CacheEntryFreed 2 -#define CacheEntryOld 3 - -typedef unsigned long CacheID; -typedef unsigned long Cache; -typedef void (*CacheFree) (CacheID cid, pointer, int flag); - -typedef struct _cache *CachePtr; - -extern Cache CacheInit(unsigned long maxsize); -extern CacheID CacheStoreMemory(Cache cid, pointer data, unsigned long size, CacheFree free_func); -extern void CacheFreeMemory(CacheID cid, Bool notify); -extern pointer CacheFetchMemory(CacheID cid, Bool update); -extern void CacheReset(void); -extern void CacheResize(Cache cid, unsigned newsize); -extern void CacheSimpleFree(CacheID cid, pointer data, int reason); - -#endif /* _CACHE_H_ */ diff --git a/include/cachestr.h b/include/cachestr.h deleted file mode 100644 index 3360e5c..0000000 --- a/include/cachestr.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -Copyright 1987, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - * Copyright 1990, 1991 Network Computing Devices; - * Portions Copyright 1987 by Digital Equipment Corporation - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the names of Network Computing Devices, - * or Digital not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. Network Computing Devices, or Digital - * make no representations about the - * suitability of this software for any purpose. It is provided "as is" - * without express or implied warranty. - * - * NETWORK COMPUTING DEVICES, AND DIGITAL DISCLAIM ALL WARRANTIES WITH - * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES, OR DIGITAL BE - * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - */ - -#ifndef _CACHSTR_H_ -#define _CACHSTR_H_ -#include "cache.h" - -typedef struct _cache_entry { - pointer data; - unsigned long timestamp; - CacheID id; - unsigned long size; - CacheFree free_func; - struct _cache_entry *next; -} CacheEntryRec, *CacheEntryPtr; - -typedef struct _cache { - Cache id; - CacheEntryPtr *entries; - int elements; - int buckets; - int hashsize; - CacheID nextid; - unsigned long maxsize; - unsigned long cursize; -} CacheRec; - -#define NullCacheEntryPtr ((CacheEntryPtr) 0) - -#endif /* _CACHSTR_H_ */ |