DynamicBuffer.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Common/DynamicBuffer.h
  2. #ifndef __COMMON_DYNAMICBUFFER_H
  3. #define __COMMON_DYNAMICBUFFER_H
  4. #include "Buffer.h"
  5. template <class T> class CDynamicBuffer: public CBuffer<T>
  6. {
  7. void GrowLength(size_t size)
  8. {
  9. size_t delta;
  10. if (this->_capacity > 64)
  11. delta = this->_capacity / 4;
  12. else if (this->_capacity > 8)
  13. delta = 16;
  14. else
  15. delta = 4;
  16. delta = MyMax(delta, size);
  17. SetCapacity(this->_capacity + delta);
  18. }
  19. public:
  20. CDynamicBuffer(): CBuffer<T>() {};
  21. CDynamicBuffer(const CDynamicBuffer &buffer): CBuffer<T>(buffer) {};
  22. CDynamicBuffer(size_t size): CBuffer<T>(size) {};
  23. CDynamicBuffer& operator=(const CDynamicBuffer &buffer)
  24. {
  25. this->Free();
  26. if(buffer._capacity > 0)
  27. {
  28. SetCapacity(buffer._capacity);
  29. memmove(this->_items, buffer._items, buffer._capacity * sizeof(T));
  30. }
  31. return *this;
  32. }
  33. void EnsureCapacity(size_t capacity)
  34. {
  35. if (this->_capacity < capacity)
  36. GrowLength(capacity - this->_capacity);
  37. }
  38. };
  39. typedef CDynamicBuffer<char> CCharDynamicBuffer;
  40. typedef CDynamicBuffer<wchar_t> CWCharDynamicBuffer;
  41. typedef CDynamicBuffer<unsigned char> CByteDynamicBuffer;
  42. #endif