aboutsummaryrefslogtreecommitdiffstats
path: root/Source/charon/allocator.h
diff options
context:
space:
mode:
authorJan Hutter <jhutter@hsr.ch>2005-11-10 07:31:17 +0000
committerJan Hutter <jhutter@hsr.ch>2005-11-10 07:31:17 +0000
commitf5b44696edd2a1e3c16cfc7f391873724a15d2a8 (patch)
tree86712d2aeea1204821af1f93c4fe67ca47c5d099 /Source/charon/allocator.h
parentfd1a4d0a6bdc03968b9eb8b10d0af87685ffa536 (diff)
downloadstrongswan-f5b44696edd2a1e3c16cfc7f391873724a15d2a8.tar.bz2
strongswan-f5b44696edd2a1e3c16cfc7f391873724a15d2a8.tar.xz
- allocator functionality capsulated in a global object
Diffstat (limited to 'Source/charon/allocator.h')
-rw-r--r--Source/charon/allocator.h108
1 files changed, 64 insertions, 44 deletions
diff --git a/Source/charon/allocator.h b/Source/charon/allocator.h
index 9c74ada0d..bd719f206 100644
--- a/Source/charon/allocator.h
+++ b/Source/charon/allocator.h
@@ -35,56 +35,76 @@
#define allocator_alloc_thing(thing) (allocator_alloc(sizeof(thing)))
#ifdef LEAK_DETECTIVE
- /**
- * Allocates memory with LEAK_DETECTION and
- * returns an empty data area filled with zeros
- *
- * @warning use this function not directly, only with assigned macros
- * allocator_alloc and allocator_alloc_thing
- *
- * @param bytes number of bytes to allocate
- * @param file filename from which the memory is allocated
- * @param line line number in specific file
- * @return allocated memory area
- */
- void * allocate(size_t bytes, char * file,int line);
- /**
- * Reallocates memory with LEAK_DETECTION and
- * returns an empty data area filled with zeros
- *
- * @warning use this function not directly, only with assigned macro
- * allocator_realloc
- *
- * @param old pointer to the old data area
- * @param bytes number of bytes to allocate
- * @param file filename from which the memory is allocated
- * @param line line number in specific file
- * @return reallocated memory area
- */
- void * reallocate(void * old, size_t bytes, char * file, int line);
- /**
- * Frees memory with LEAK_DETECTION
- *
- * @warning use this function not directly, only with assigned macro
- * allocator_free
- *
- * @param pointer pointer to the data area to free
- */
- void free_pointer(void * pointer);
+ typedef struct allocator_s allocator_t;
+
+ struct allocator_s {
+
+ /**
+ * Allocates memory with LEAK_DETECTION and
+ * returns an empty data area filled with zeros
+ *
+ * @warning use this function not directly, only with assigned macros
+ * allocator_alloc and allocator_alloc_thing
+ *
+ * @param this allocator_t object
+ * @param bytes number of bytes to allocate
+ * @param file filename from which the memory is allocated
+ * @param line line number in specific file
+ * @return allocated memory area
+ */
+ void * (*allocate) (allocator_t *this,size_t bytes, char * file,int line);
+
+ /**
+ * Reallocates memory with LEAK_DETECTION and
+ * returns an empty data area filled with zeros
+ *
+ * @warning use this function not directly, only with assigned macro
+ * allocator_realloc
+ *
+ * @param this allocator_t object
+ * @param old pointer to the old data area
+ * @param bytes number of bytes to allocate
+ * @param file filename from which the memory is allocated
+ * @param line line number in specific file
+ * @return reallocated memory area
+ */
+ void * (*reallocate) (allocator_t *this,void * old, size_t bytes, char * file, int line);
+ /**
+ * Frees memory with LEAK_DETECTION
+ *
+ * @warning use this function not directly, only with assigned macro
+ * allocator_free
+ *
+ * @param this allocator_t object
+ * @param pointer pointer to the data area to free
+ */
+ void (*free_pointer) (allocator_t *this,void * pointer);
+
+ /**
+ * Report memory leaks to stderr
+ *
+ * @warning use this function not directly, only with assigned macro
+ * report_memory_leaks
+ *
+ * @param this allocator_t object
+ */
+ void (*report_memory_leaks) (allocator_t *this);
+ };
- #define allocator_alloc(bytes) (allocate(bytes,__FILE__,__LINE__))
- #define allocator_realloc(old,bytes) (reallocate(old,bytes,__FILE__, __LINE__))
- #define allocator_free(pointer) (free_pointer(pointer))
+ #ifndef ALLOCATOR_C_
+ extern allocator_t *global_allocator;
+ #endif
+
+ #define allocator_alloc(bytes) (global_allocator->allocate(global_allocator,bytes,__FILE__,__LINE__))
+ #define allocator_realloc(old,bytes) (global_allocator->reallocate(global_allocator,old,bytes,__FILE__, __LINE__))
+ #define allocator_free(pointer) (global_allocator->free_pointer(global_allocator,pointer))
#define allocator_free_chunk(chunk){ \
- free_pointer(chunk.ptr); \
+ global_allocator->free_pointer(global_allocator,chunk.ptr); \
chunk.ptr = NULL; \
chunk.len = 0; \
}
- /**
- * Report memory leaks to stderr
- */
- void report_memory_leaks(void);
+ #define report_memory_leaks(void) global_allocator->report_memory_leaks(global_allocator);
#else
#define allocator_alloc(bytes) (malloc(bytes))
#define allocator_realloc(old,bytes) (realloc(old,bytes))