46 lines
933 B
C++
46 lines
933 B
C++
// Common/MyBuffer2.h
|
|
|
|
#ifndef __COMMON_MY_BUFFER2_H
|
|
#define __COMMON_MY_BUFFER2_H
|
|
|
|
#include "../../C/Alloc.h"
|
|
|
|
#include "Defs.h"
|
|
|
|
class CMidBuffer
|
|
{
|
|
Byte *_data;
|
|
size_t _size;
|
|
|
|
CLASS_NO_COPY(CMidBuffer)
|
|
|
|
public:
|
|
CMidBuffer(): _data(NULL), _size(0) {};
|
|
~CMidBuffer() { ::MidFree(_data); }
|
|
|
|
void Free() { ::MidFree(_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 AllocAtLeast(size_t size)
|
|
{
|
|
if (!_data || size > _size)
|
|
{
|
|
const size_t kMinSize = (size_t)1 << 16;
|
|
if (size < kMinSize)
|
|
size = kMinSize;
|
|
::MidFree(_data);
|
|
_size = 0;
|
|
_data = 0;
|
|
_data = (Byte *)::MidAlloc(size);
|
|
if (_data)
|
|
_size = size;
|
|
}
|
|
}
|
|
};
|
|
|
|
#endif
|