// Common/DynamicBuffer.h #ifndef __COMMON_DYNAMIC_BUFFER_H #define __COMMON_DYNAMIC_BUFFER_H #include "Buffer.h" template class CDynamicBuffer: public CBuffer { void GrowLength(size_t size) { size_t delta; if (this->_capacity > 64) delta = this->_capacity / 4; else if (this->_capacity > 8) delta = 16; else delta = 4; delta = MyMax(delta, size); size_t newCap = this->_capacity + delta; if (newCap < delta) newCap = this->_capacity + size; this->SetCapacity(newCap); } public: CDynamicBuffer(): CBuffer() {}; CDynamicBuffer(const CDynamicBuffer &buffer): CBuffer(buffer) {}; CDynamicBuffer(size_t size): CBuffer(size) {}; CDynamicBuffer& operator=(const CDynamicBuffer &buffer) { this->Free(); if (buffer._capacity > 0) { this->SetCapacity(buffer._capacity); memmove(this->_items, buffer._items, buffer._capacity * sizeof(T)); } return *this; } void EnsureCapacity(size_t capacity) { if (this->_capacity < capacity) GrowLength(capacity - this->_capacity); } }; typedef CDynamicBuffer CCharDynamicBuffer; typedef CDynamicBuffer CWCharDynamicBuffer; typedef CDynamicBuffer CByteDynamicBuffer; #endif