diff options
Diffstat (limited to 'CPP/Common/MyBuffer2.h')
-rw-r--r-- | CPP/Common/MyBuffer2.h | 63 |
1 files changed, 59 insertions, 4 deletions
diff --git a/CPP/Common/MyBuffer2.h b/CPP/Common/MyBuffer2.h index ba98d137..d61a72ef 100644 --- a/CPP/Common/MyBuffer2.h +++ b/CPP/Common/MyBuffer2.h @@ -5,7 +5,7 @@ #include "../../C/Alloc.h" -#include "Defs.h" +#include "MyTypes.h" class CMidBuffer { @@ -15,7 +15,7 @@ class CMidBuffer CLASS_NO_COPY(CMidBuffer) public: - CMidBuffer(): _data(NULL), _size(0) {}; + CMidBuffer(): _data(NULL), _size(0) {} ~CMidBuffer() { ::MidFree(_data); } void Free() { ::MidFree(_data); _data = NULL; _size = 0; } @@ -29,12 +29,12 @@ public: { if (!_data || size > _size) { + ::MidFree(_data); const size_t kMinSize = (size_t)1 << 16; if (size < kMinSize) size = kMinSize; - ::MidFree(_data); _size = 0; - _data = 0; + _data = NULL; _data = (Byte *)::MidAlloc(size); if (_data) _size = size; @@ -42,4 +42,59 @@ public: } }; + +class CAlignedBuffer +{ + Byte *_data; + size_t _size; + + CLASS_NO_COPY(CAlignedBuffer) + +public: + CAlignedBuffer(): _data(NULL), _size(0) {} + ~CAlignedBuffer() + { + ISzAlloc_Free(&g_AlignedAlloc, _data); + } + + void Free() + { + ISzAlloc_Free(&g_AlignedAlloc, _data); + _data = NULL; + _size = 0; + } + + bool IsAllocated() const { return _data != NULL; } + operator Byte *() { return _data; } + operator const Byte *() const { return _data; } + size_t Size() const { return _size; } + + void Alloc(size_t size) + { + if (!_data || size != _size) + { + ISzAlloc_Free(&g_AlignedAlloc, _data); + _size = 0; + _data = NULL; + _data = (Byte *)ISzAlloc_Alloc(&g_AlignedAlloc, size); + if (_data) + _size = size; + } + } + + void AllocAtLeast(size_t size) + { + if (!_data || size > _size) + { + ISzAlloc_Free(&g_AlignedAlloc, _data); + _size = 0; + _data = NULL; + _data = (Byte *)ISzAlloc_Alloc(&g_AlignedAlloc, size); + if (_data) + _size = size; + } + } +}; + + #endif |