# HG changeset patch # User skidd13 # Date 1213870742 0 # Node ID 9c818b06c54d38bb0183936349378334a97b1d43 # Parent 830493d2f4990288a104360a23febb1eff2e4839 (svn r13575) -Codechange: Move small vector to core since it fits better in there -Codechange: convert smallvector from struct to class diff -r 830493d2f499 -r 9c818b06c54d projects/openttd_vs80.vcproj --- a/projects/openttd_vs80.vcproj Thu Jun 19 09:33:50 2008 +0000 +++ b/projects/openttd_vs80.vcproj Thu Jun 19 10:19:02 2008 +0000 @@ -1452,6 +1452,10 @@ > + + @@ -2404,10 +2408,6 @@ > - - diff -r 830493d2f499 -r 9c818b06c54d projects/openttd_vs90.vcproj --- a/projects/openttd_vs90.vcproj Thu Jun 19 09:33:50 2008 +0000 +++ b/projects/openttd_vs90.vcproj Thu Jun 19 10:19:02 2008 +0000 @@ -1449,6 +1449,10 @@ > + + @@ -2401,10 +2405,6 @@ > - - diff -r 830493d2f499 -r 9c818b06c54d source.list --- a/source.list Thu Jun 19 09:33:50 2008 +0000 +++ b/source.list Thu Jun 19 10:19:02 2008 +0000 @@ -288,6 +288,7 @@ signs_type.h slope_func.h slope_type.h +core/smallvec_type.hpp core/sort_func.hpp sortlist_type.h sound_func.h @@ -552,7 +553,6 @@ misc/dbg_helpers.h misc/fixedsizearray.hpp misc/hashtable.hpp -misc/smallvec.h misc/str.hpp misc/strapi.hpp diff -r 830493d2f499 -r 9c818b06c54d src/core/smallvec_type.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/core/smallvec_type.hpp Thu Jun 19 10:19:02 2008 +0000 @@ -0,0 +1,165 @@ +/* $Id$ */ + +/** @file smallvec_type.hpp Simple vector class that allows allocating an item without the need to copy this->data needlessly. */ + +#ifndef SMALLVEC_TYPE_HPP +#define SMALLVEC_TYPE_HPP + +#include "alloc_func.hpp" +#include "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 +class SmallVector { +protected: + T *data; ///< The pointer to the first item + uint items; ///< The number of items stored + uint capacity; ///< The avalible space for storing items + +public: + 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_TYPE_HPP */ diff -r 830493d2f499 -r 9c818b06c54d src/fios.h --- a/src/fios.h Thu Jun 19 09:33:50 2008 +0000 +++ b/src/fios.h Thu Jun 19 10:19:02 2008 +0000 @@ -6,7 +6,7 @@ #define FIOS_H #include "strings_type.h" -#include "misc/smallvec.h" +#include "core/smallvec_type.hpp" enum { /** diff -r 830493d2f499 -r 9c818b06c54d src/misc/smallvec.h --- a/src/misc/smallvec.h Thu Jun 19 09:33:50 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -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 -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 */ diff -r 830493d2f499 -r 9c818b06c54d src/sortlist_type.h --- a/src/sortlist_type.h Thu Jun 19 09:33:50 2008 +0000 +++ b/src/sortlist_type.h Thu Jun 19 10:19:02 2008 +0000 @@ -9,7 +9,7 @@ #include "core/bitmath_func.hpp" #include "core/mem_func.hpp" #include "core/sort_func.hpp" -#include "misc/smallvec.h" +#include "core/smallvec_type.hpp" #include "date_type.h" enum SortListFlags { diff -r 830493d2f499 -r 9c818b06c54d src/vehiclelist.h --- a/src/vehiclelist.h Thu Jun 19 09:33:50 2008 +0000 +++ b/src/vehiclelist.h Thu Jun 19 10:19:02 2008 +0000 @@ -5,7 +5,7 @@ #ifndef VEHICLELIST_H #define VEHICLELIST_H -#include "misc/smallvec.h" +#include "core/smallvec_type.hpp" typedef SmallVector VehicleList; diff -r 830493d2f499 -r 9c818b06c54d src/viewport.cpp --- a/src/viewport.cpp Thu Jun 19 09:33:50 2008 +0000 +++ b/src/viewport.cpp Thu Jun 19 10:19:02 2008 +0000 @@ -44,7 +44,7 @@ #include "settings_type.h" #include "station_func.h" #include "core/alloc_type.hpp" -#include "misc/smallvec.h" +#include "core/smallvec_type.hpp" #include "window_func.h" #include "tilehighlight_func.h" #include "window_gui.h"