1cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// Common/MyBuffer.h
2cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
3cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef __COMMON_MY_BUFFER_H
4cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#define __COMMON_MY_BUFFER_H
5cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
6cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "Defs.h"
7cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
8cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytemplate <class T> class CBuffer
9cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
10cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  T *_items;
11cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  size_t _size;
12cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
13cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void CopyToEmpty(const CBuffer &buffer)
14cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
15cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (buffer._size > 0)
16cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    {
17cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      _items = new T[buffer._size];
18cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      memcpy(_items, buffer._items, buffer._size * sizeof(T));
19cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      _size = buffer._size;
20cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    }
21cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
22cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic:
23cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void Free()
24cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
25cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (_items)
26cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    {
27cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      delete []_items;
28cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      _items = 0;
29cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    }
30cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    _size = 0;
31cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
32cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
33cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CBuffer(): _items(0), _size(0) {};
34cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CBuffer(size_t size): _items(0), _size(0) { _items = new T[size]; _size = size; }
35cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CBuffer(const CBuffer &buffer): _items(0), _size(0) { CopyToEmpty(buffer); }
36cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  ~CBuffer() { delete []_items; }
37cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
38cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  operator       T *()       { return _items; };
39cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  operator const T *() const { return _items; };
40cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  size_t Size() const { return _size; }
41cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
42cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void Alloc(size_t size)
43cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
44cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (size != _size)
45cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    {
46cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      Free();
47cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      if (size != 0)
48cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      {
49cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky        _items = new T[size];
50cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky        _size = size;
51cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      }
52cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    }
53cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
54cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
55cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void AllocAtLeast(size_t size)
56cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
57cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (size > _size)
58cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    {
59cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      Free();
60cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      _items = new T[size];
61cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      _size = size;
62cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    }
63cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
64cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
65cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void CopyFrom(const T *data, size_t size)
66cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
67cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    Alloc(size);
68cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    memcpy(_items, data, size * sizeof(T));
69cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
70cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
71cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void ChangeSize_KeepData(size_t newSize, size_t keepSize)
72cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
73cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (newSize == _size)
74cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      return;
75cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    T *newBuffer = NULL;
76cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (newSize > 0)
77cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    {
78cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      newBuffer = new T[newSize];
79cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      if (_size > 0)
80cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky        memcpy(newBuffer, _items, MyMin(MyMin(_size, keepSize), newSize) * sizeof(T));
81cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    }
82cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    delete []_items;
83cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    _items = newBuffer;
84cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    _size = newSize;
85cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
86cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
87cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CBuffer& operator=(const CBuffer &buffer)
88cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
89cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    Free();
90cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    CopyToEmpty(buffer);
91cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return *this;
92cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
93cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky};
94cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
95cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytemplate <class T>
96cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool operator==(const CBuffer<T>& b1, const CBuffer<T>& b2)
97cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
98cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  size_t size1 = b1.Size();
99cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (size1 != b2.Size())
100cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return false;
101cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return memcmp(b1, b2, size1 * sizeof(T)) == 0;
102cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
103cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
104cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytemplate <class T>
105cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool operator!=(const CBuffer<T>& b1, const CBuffer<T>& b2)
106cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
107cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  size_t size1 = b1.Size();
108cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (size1 == b2.Size())
109cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return false;
110cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return memcmp(b1, b2, size1 * sizeof(T)) != 0;
111cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
112cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
113cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
114cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytypedef CBuffer<char> CCharBuffer;
115cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytypedef CBuffer<wchar_t> CWCharBuffer;
116cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytypedef CBuffer<unsigned char> CByteBuffer;
117cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
118cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
119cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytemplate <class T> class CObjArray
120cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
121cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyprotected:
122cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  T *_items;
123cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyprivate:
124cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  // we disable constructors
125cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CObjArray(const CObjArray &buffer);
126cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void operator=(const CObjArray &buffer);
127cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic:
128cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void Free()
129cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
130cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    delete []_items;
131cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    _items = 0;
132cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
133cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CObjArray(size_t size): _items(0) { if (size != 0) _items = new T[size]; }
134cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CObjArray(): _items(0) {};
135cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  ~CObjArray() { delete []_items; }
136cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
137cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  operator       T *()       { return _items; };
138cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  operator const T *() const { return _items; };
139cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
140cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void Alloc(size_t newSize)
141cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
142cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    delete []_items;
143cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    _items = 0;
144cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    _items = new T[newSize];
145cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
146cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky};
147cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
148cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytypedef CObjArray<unsigned char> CByteArr;
149cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytypedef CObjArray<bool> CBoolArr;
150cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytypedef CObjArray<int> CIntArr;
151cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
152cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// #define CRecArray CObjArray
153cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
154cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytemplate <class T> class CObjArray2
155cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
156cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// protected:
157cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  T *_items;
158cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  unsigned _size;
159cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
160cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CObjArray2(const CObjArray2 &buffer);
161cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void operator=(const CObjArray2 &buffer);
162cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic:
163cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
164cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void Free()
165cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
166cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    delete []_items;
167cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    _items = 0;
168cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    _size = 0;
169cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
170cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CObjArray2(): _items(0), _size(0) {};
171cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  /*
172cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CObjArray2(const CObjArray2 &buffer): _items(0), _size(0)
173cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
174cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    size_t newSize = buffer._size;
175cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (newSize > 0)
176cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    {
177cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      T *newBuffer = new T[newSize];;
178cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      _items = newBuffer;
179cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      _size = newSize;
180cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      const T *src = buffer;
181cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      for (size_t i = 0; i < newSize; i++)
182cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky        newBuffer[i] = src[i];
183cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    }
184cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
185cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  */
186cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  /*
187cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CObjArray2(size_t size): _items(0), _size(0)
188cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
189cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (size != 0)
190cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    {
191cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      _items = new T[size];
192cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      _size = size;
193cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    }
194cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
195cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  */
196cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
197cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  ~CObjArray2() { delete []_items; }
198cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
199cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  operator       T *()       { return _items; };
200cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  operator const T *() const { return _items; };
201cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
202cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  unsigned Size() const { return (unsigned)_size; }
203cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool IsEmpty() const { return _size == 0; }
204cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
205cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  // SetSize doesn't keep old items. It allocates new array if size is not equal
206cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void SetSize(unsigned size)
207cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
208cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (size == _size)
209cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      return;
210cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    T *newBuffer = NULL;
211cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (size > 0)
212cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      newBuffer = new T[size];
213cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    delete []_items;
214cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    _items = newBuffer;
215cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    _size = size;
216cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
217cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
218cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  /*
219cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CObjArray2& operator=(const CObjArray2 &buffer)
220cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
221cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    Free();
222cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    size_t newSize = buffer._size;
223cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (newSize > 0)
224cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    {
225cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      T *newBuffer = new T[newSize];;
226cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      _items = newBuffer;
227cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      _size = newSize;
228cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      const T *src = buffer;
229cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      for (size_t i = 0; i < newSize; i++)
230cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky        newBuffer[i] = src[i];
231cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    }
232cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return *this;
233cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
234cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  */
235cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky};
236cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
237cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif
238