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