diff options
Diffstat (limited to 'src/misc/smallvec.h')
-rw-r--r-- | src/misc/smallvec.h | 163 |
1 files changed, 0 insertions, 163 deletions
diff --git a/src/misc/smallvec.h b/src/misc/smallvec.h deleted file mode 100644 index 477a93178..000000000 --- a/src/misc/smallvec.h +++ /dev/null @@ -1,163 +0,0 @@ -/* $Id$ */ - -/** @file smallvec.h Simple vector class that allows allocating an item without the need to copy this->data needlessly. */ - -#ifndef SMALLVEC_H -#define SMALLVEC_H - -#include "../core/alloc_func.hpp" -#include "../core/math_func.hpp" - -/** - * Simple vector template class. - * - * @note There are no asserts in the class so you have - * to care about that you grab an item which is - * inside the list. - * - * @param T The type of the items stored - * @param S The steps of allocation - */ -template <typename T, uint S> -struct SmallVector { - T *data; ///< The pointer to the first item - uint items; ///< The number of items stored - uint capacity; ///< The avalible space for storing items - - SmallVector() : data(NULL), items(0), capacity(0) { } - - ~SmallVector() - { - free(this->data); - } - - /** - * Remove all items from the list. - */ - void Clear() - { - /* In fact we just reset the item counter avoiding the need to - * probably reallocate the same amount of memory the list was - * previously using. */ - this->items = 0; - } - - /** - * Compact the list down to the smallest block size boundary. - */ - void Compact() - { - uint capacity = Align(this->items, S); - if (capacity >= this->capacity) return; - - this->capacity = capacity; - this->data = ReallocT(this->data, this->capacity); - } - - /** - * Append an item and return it. - */ - T *Append() - { - if (this->items == this->capacity) { - this->capacity += S; - this->data = ReallocT(this->data, this->capacity); - } - - return &this->data[this->items++]; - } - - /** - * Get the number of items in the list. - */ - uint Length() const - { - return this->items; - } - - /** - * Get the pointer to the first item (const) - * - * @return the pointer to the first item - */ - const T *Begin() const - { - return this->data; - } - - /** - * Get the pointer to the first item - * - * @return the pointer to the first item - */ - T *Begin() - { - return this->data; - } - - /** - * Get the pointer behind the last valid item (const) - * - * @return the pointer behind the last valid item - */ - const T *End() const - { - return &this->data[this->items]; - } - - /** - * Get the pointer behind the last valid item - * - * @return the pointer behind the last valid item - */ - T *End() - { - return &this->data[this->items]; - } - - /** - * Get the pointer to item "number" (const) - * - * @param index the position of the item - * @return the pointer to the item - */ - const T *Get(uint index) const - { - return &this->data[index]; - } - - /** - * Get the pointer to item "number" - * - * @param index the position of the item - * @return the pointer to the item - */ - T *Get(uint index) - { - return &this->data[index]; - } - - /** - * Get item "number" (const) - * - * @param index the positon of the item - * @return the item - */ - const T &operator[](uint index) const - { - return this->data[index]; - } - - /** - * Get item "number" - * - * @param index the positon of the item - * @return the item - */ - T &operator[](uint index) - { - return this->data[index]; - } -}; - -#endif /* SMALLVEC_H */ |