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> // IS_POW2()
00052 
00053 /* NOTE: struct size must be a 2's power! */
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 size_t heap_freeSpace(struct Heap *h);
00089 
00090 #define HNEW(heap, type) \
00091     (type*)heap_allocmem(heap, sizeof(type))
00092 
00093 #define HNEWVEC(heap, type, nelem) \
00094     (type*)heap_allocmem(heap, sizeof(type) * (nelem))
00095 
00096 #define HDELETE(heap, type, mem) \
00097     heap_freemem(heap, mem, sizeof(type))
00098 
00099 #define HDELETEVEC(heap, type, nelem, mem) \
00100     heap_freemem(heap, mem, sizeof(type) * (nelem))
00101 
00102 
00103 #if CONFIG_HEAP_MALLOC
00104 
00105 void *heap_malloc(struct Heap* heap, size_t size);
00106 void *heap_calloc(struct Heap* heap, size_t size);
00107 void heap_free(struct Heap* heap, void * mem);
00108 
00109 #endif
00110 
00111 int heap_testSetup(void);
00112 int heap_testRun(void);
00113 int heap_testTearDown(void);
00114 
00115 #endif /* STRUCT_HEAP_H */