12 #ifndef SMALLVEC_TYPE_HPP 13 #define SMALLVEC_TYPE_HPP 28 template <
typename T, u
int S>
36 SmallVector() : data(NULL), items(0), capacity(0) { }
89 if ((
const void *)&other == (
void *)
this)
return;
122 uint capacity =
Align(this->items, S);
123 if (capacity >= this->capacity)
return;
126 this->data =
ReallocT(this->data, this->capacity);
136 uint begin = this->
items;
137 this->items += to_add;
139 if (this->items > this->capacity) {
140 this->capacity =
Align(this->items, S);
141 this->data =
ReallocT(this->data, this->capacity);
144 return &this->data[begin];
153 this->items = num_items;
155 if (this->items > this->capacity) {
156 this->capacity =
Align(this->items, S);
157 this->data =
ReallocT(this->data, this->capacity);
167 inline const T *
Find(
const T &item)
const 169 const T *pos = this->
Begin();
170 const T *end = this->
End();
171 while (pos != end && *pos != item) pos++;
183 T *pos = this->
Begin();
184 const T *end = this->
End();
185 while (pos != end && *pos != item) pos++;
198 const T *pos = this->
Begin();
199 const T *end = this->
End();
200 while (pos != end && *pos != item) {
204 return pos == end ? -1 : index;
215 return this->
Find(item) != this->
End();
225 assert(item >= this->
Begin() && item < this->
End());
226 *item = this->data[--this->
items];
236 if (count == 0)
return;
237 assert(pos < this->items);
238 assert(pos + count <= this->items);
239 this->items -= count;
240 uint to_move = this->items - pos;
241 if (to_move > 0)
MemMoveT(this->data + pos, this->data + pos + count, to_move);
252 bool is_member = this->
Contains(item);
253 if (!is_member) *this->
Append() = item;
292 inline const T *
End()
const 294 return &this->data[this->
items];
304 return &this->data[this->
items];
313 inline const T *
Get(uint index)
const 316 assert(index <= this->items);
317 return &this->data[index];
329 assert(index <= this->items);
330 return &this->data[index];
341 assert(index < this->items);
342 return this->data[index];
353 assert(index < this->items);
354 return this->data[index];
369 template <
typename T, u
int S>
382 for (uint i = 0; i < this->
items; i++) {
400 template <
typename T, u
int S>
413 for (uint i = 0; i < this->
items; i++) {
414 delete this->
data[i];
void ErasePreservingOrder(uint pos, uint count=1)
Remove items from the vector while preserving the order of other items.
void Reset()
Remove all items from the list and free allocated memory.
void Clear()
Remove all items from the list.
void Compact()
Compact the list down to the smallest block size boundary.
const T * Begin() const
Get the pointer to the first item (const)
Simple vector template class.
const T & operator[](uint index) const
Get item "number" (const)
const T * End() const
Get the pointer behind the last valid item (const)
T * Append(uint to_add=1)
Append an item and return it.
static void MemMoveT(T *destination, const T *source, size_t num=1)
Type-safe version of memmove().
void Resize(uint num_items)
Set the size of the vector, effectively truncating items from the end or appending uninitialised ones...
SmallVector & operator=(const SmallVector< T, X > &other)
Generic assignment.
uint capacity
The available space for storing items.
uint Length() const
Get the number of items in the list.
static T Align(const T x, uint n)
Return the smallest multiple of n equal or greater than x.
bool Contains(const T &item) const
Tests whether a item is present in the vector.
Functions related to the allocation of memory.
SmallVector(const SmallVector &other)
Copy constructor.
Simple vector template class, with automatic delete.
T * data
The pointer to the first item.
static T * ReallocT(T *t_ptr, size_t num_elements)
Simplified reallocation function that allocates the specified number of elements of the given type...
void Assign(const SmallVector< T, X > &other)
Assign items from other vector.
const T * Find(const T &item) const
Search for the first occurrence of an item.
SmallVector(const SmallVector< T, X > &other)
Generic copy constructor.
AutoFreeSmallVector< char *, 4 > StringList
Type for a list of strings.
Simple vector template class, with automatic free.
void Clear()
Remove all items from the list.
int FindIndex(const T &item) const
Search for the first occurrence of an item.
bool Include(const T &item)
Tests whether a item is present in the vector, and appends it to the end if not.
void Erase(T *item)
Removes given item from this vector.
void Clear()
Remove all items from the list.
static void free(const void *ptr)
Version of the standard free that accepts const pointers.
const T * Get(uint index) const
Get the pointer to item "number" (const)
Functions related to memory operations.
SmallVector & operator=(const SmallVector &other)
Assignment.
uint items
The number of items stored.