Mercurial > vba-clojure
view src/win32/7zip/7z/CPP/Common/DynamicBuffer.h @ 4:5f6f2134e8ce
apu appears to not be used
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:35:58 -0600 |
parents | f9f4f1b99eed |
children |
line wrap: on
line source
1 // Common/DynamicBuffer.h3 #ifndef __COMMON_DYNAMICBUFFER_H4 #define __COMMON_DYNAMICBUFFER_H6 #include "Buffer.h"8 template <class T> class CDynamicBuffer: public CBuffer<T>9 {10 void GrowLength(size_t size)11 {12 size_t delta;13 if (this->_capacity > 64)14 delta = this->_capacity / 4;15 else if (this->_capacity > 8)16 delta = 16;17 else18 delta = 4;19 delta = MyMax(delta, size);20 SetCapacity(this->_capacity + delta);21 }22 public:23 CDynamicBuffer(): CBuffer<T>() {};24 CDynamicBuffer(const CDynamicBuffer &buffer): CBuffer<T>(buffer) {};25 CDynamicBuffer(size_t size): CBuffer<T>(size) {};26 CDynamicBuffer& operator=(const CDynamicBuffer &buffer)27 {28 this->Free();29 if (buffer._capacity > 0)30 {31 SetCapacity(buffer._capacity);32 memmove(this->_items, buffer._items, buffer._capacity * sizeof(T));33 }34 return *this;35 }36 void EnsureCapacity(size_t capacity)37 {38 if (this->_capacity < capacity)39 GrowLength(capacity - this->_capacity);40 }41 };43 typedef CDynamicBuffer<char> CCharDynamicBuffer;44 typedef CDynamicBuffer<wchar_t> CWCharDynamicBuffer;45 typedef CDynamicBuffer<unsigned char> CByteDynamicBuffer;47 #endif