aboutsummaryrefslogtreecommitdiff
path: root/CPP/Common/MyBuffer2.h
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/Common/MyBuffer2.h')
-rw-r--r--CPP/Common/MyBuffer2.h63
1 files changed, 59 insertions, 4 deletions
diff --git a/CPP/Common/MyBuffer2.h b/CPP/Common/MyBuffer2.h
index 5cabd73..10edcb1 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