BeRTOS
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> // IS_POW2()
00055 
00056 /* NOTE: struct size must be a 2's power! */
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  //defgroup heap
00120 
00121 int heap_testSetup(void);
00122 int heap_testRun(void);
00123 int heap_testTearDown(void);
00124 
00125 #endif /* STRUCT_HEAP_H */