00001
00002
00003 #ifndef _IGNOREINVALIDFREE_H_
00004 #define _IGNOREINVALIDFREE_H_
00005
00006 #include "hldefines.h"
00007
00008 namespace Hoard {
00009
00010
00011
00012
00013
00014
00015
00016 template <class S>
00017 class IgnoreInvalidFree : public S {
00018 public:
00019 INLINE void free (void * ptr) {
00020 typename S::SuperblockType * s = S::getSuperblock (ptr);
00021 if (!s || (!s->isValidSuperblock())) {
00022
00023 return;
00024 }
00025 S::free (ptr);
00026 }
00027
00028 INLINE size_t getSize (void * ptr) {
00029 typename S::SuperblockType * s = S::getSuperblock (ptr);
00030 if (!s || (!s->isValidSuperblock())) {
00031 return 0;
00032 }
00033 return S::getSize (ptr);
00034 }
00035
00036 private:
00037
00038
00039 enum { ALREADY_FREED_VALUE = 0xDeadBeef };
00040
00041 };
00042
00043 }
00044
00045 #endif