00001
00002
00003 #ifndef _ADDHEAP_H_
00004 #define _ADDHEAP_H_
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include <assert.h>
00033
00034 namespace HL {
00035
00036 template <class Add, class Super>
00037 class AddHeap : public Super {
00038 public:
00039
00040 inline void * malloc (size_t sz) {
00041 void * ptr = Super::malloc (sz + align(sizeof(Add)));
00042 void * newPtr = (void *) align ((size_t) ((Add *) ptr + 1));
00043 return ptr;
00044 }
00045
00046 inline void free (void * ptr) {
00047 void * origPtr = (void *) ((Add *) ptr - 1);
00048 Super::free (origPtr);
00049 }
00050
00051 inline size_t getSize (void * ptr) {
00052 void * origPtr = (void *) ((Add *) ptr - 1);
00053 return Super::getSize (origPtr);
00054 }
00055
00056 private:
00057 static inline size_t align (size_t sz) {
00058 return (sz + (sizeof(double) - 1)) & ~(sizeof(double) - 1);
00059 }
00060
00061 };
00062
00063 };
00064 #endif