diff options
author | Trond Norbye <Trond.Norbye@sun.com> | 2009-03-27 18:30:16 +0100 |
---|---|---|
committer | Dustin Sallings <dustin@spy.net> | 2009-04-17 16:15:52 -0700 |
commit | 4c86fa592fcc7cb685c6e9d8b6aebe8dcbac6b3e (patch) | |
tree | 94b644163f6381a9930e2d7c583fae023895b903 /cache.h | |
parent | ee0c3d5ae74d0862b4d9990e2ad13bc79f8c34df (diff) | |
download | memcached-4c86fa592fcc7cb685c6e9d8b6aebe8dcbac6b3e.tar.gz |
Create a generic cache for objects of same size
The suffix pool could be thread-local and use the generic cache
Diffstat (limited to 'cache.h')
-rw-r--r-- | cache.h | 44 |
1 files changed, 44 insertions, 0 deletions
@@ -0,0 +1,44 @@ +/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */ +#ifndef CACHE_H +#define CACHE_H +#include <pthread.h> + +#ifdef HAVE_UMEM_H +#include <umem.h> +#define cache_t umem_cache_t +#define cache_alloc(a) umem_cache_alloc(a, UMEM_DEFAULT) +#define cache_free(a, b) umem_cache_free(a, b) +#define cache_create(a,b,c,d,e) umem_cache_create((char*)a, b, c, d, e, NULL, NULL, NULL, 0) +#define cache_destroy(a) umem_cache_destroy(a); + +#else + +#ifndef NDEBUG +/* may be used for debug purposes */ +extern int cache_error; +#endif + +typedef int cache_constructor_t(void *, void *, int); +typedef void cache_destructor_t(void *, void *); + +typedef struct { + pthread_mutex_t mutex; + char *name; + void **ptr; + size_t bufsize; + int freetotal; + int freecurr; + cache_constructor_t* constructor; + cache_destructor_t* destructor; +} cache_t; + + +cache_t* cache_create(const char *name, size_t bufsize, size_t align, + cache_constructor_t* constructor, + cache_destructor_t* destructor); +void cache_destroy(cache_t*); +void* cache_alloc(cache_t*); +void cache_free(cache_t*, void*); +#endif + +#endif |