From 4c86fa592fcc7cb685c6e9d8b6aebe8dcbac6b3e Mon Sep 17 00:00:00 2001 From: Trond Norbye Date: Fri, 27 Mar 2009 18:30:16 +0100 Subject: Create a generic cache for objects of same size The suffix pool could be thread-local and use the generic cache --- cache.h | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 cache.h (limited to 'cache.h') diff --git a/cache.h b/cache.h new file mode 100644 index 0000000..f720ee0 --- /dev/null +++ b/cache.h @@ -0,0 +1,44 @@ +/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */ +#ifndef CACHE_H +#define CACHE_H +#include + +#ifdef HAVE_UMEM_H +#include +#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 -- cgit v1.2.1