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