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