Mercurial > vba-linux
comparison src/win32/7zip/7z/CPP/Common/DynamicBuffer.h @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:8ced16adf2e1 | 1:f9f4f1b99eed |
---|---|
1 // Common/DynamicBuffer.h | |
2 | |
3 #ifndef __COMMON_DYNAMICBUFFER_H | |
4 #define __COMMON_DYNAMICBUFFER_H | |
5 | |
6 #include "Buffer.h" | |
7 | |
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 else | |
18 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 }; | |
42 | |
43 typedef CDynamicBuffer<char> CCharDynamicBuffer; | |
44 typedef CDynamicBuffer<wchar_t> CWCharDynamicBuffer; | |
45 typedef CDynamicBuffer<unsigned char> CByteDynamicBuffer; | |
46 | |
47 #endif |