summaryrefslogtreecommitdiff
path: root/cache.h
diff options
context:
space:
mode:
Diffstat (limited to 'cache.h')
-rw-r--r--cache.h44
1 files changed, 44 insertions, 0 deletions
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 <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