heap.h
Go to the documentation of this file.00001
00046 #ifndef STRUCT_HEAP_H
00047 #define STRUCT_HEAP_H
00048
00049 #include "cfg/cfg_heap.h"
00050 #include <cfg/compiler.h>
00051 #include <cfg/macros.h>
00052
00053
00054 typedef struct _MemChunk
00055 {
00056 struct _MemChunk *next;
00057 size_t size;
00058 } MemChunk;
00059
00060 STATIC_ASSERT(IS_POW2(sizeof(MemChunk)));
00061
00062 typedef MemChunk heap_buf_t;
00063
00065 typedef struct Heap
00066 {
00067 struct _MemChunk *FreeList;
00068 } Heap;
00069
00076 #define HEAP_DEFINE_BUF(name, size) \
00077 heap_buf_t name[((size) + sizeof(heap_buf_t) - 1) / sizeof(heap_buf_t)]
00078
00080 void heap_init(struct Heap* heap, void* memory, size_t size);
00081
00083 void *heap_allocmem(struct Heap* heap, size_t size);
00084
00086 void heap_freemem(struct Heap* heap, void *mem, size_t size);
00087
00088
00089 #define HNEW(heap, type) \
00090 (type*)heap_allocmem(heap, sizeof(type))
00091
00092 #define HNEWVEC(heap, type, nelem) \
00093 (type*)heap_allocmem(heap, sizeof(type) * (nelem))
00094
00095 #define HDELETE(heap, type, mem) \
00096 heap_freemem(heap, mem, sizeof(type))
00097
00098 #define HDELETEVEC(heap, type, nelem, mem) \
00099 heap_freemem(heap, mem, sizeof(type) * (nelem))
00100
00101
00102 #if CONFIG_HEAP_MALLOC
00103
00104 void *heap_malloc(struct Heap* heap, size_t size);
00105 void *heap_calloc(struct Heap* heap, size_t size);
00106 void heap_free(struct Heap* heap, void * mem);
00107
00108 #endif
00109
00110 int heap_testSetup(void);
00111 int heap_testRun(void);
00112 int heap_testTearDown(void);
00113
00114 #endif