diff --git a/projects/openttd_vs80.vcproj b/projects/openttd_vs80.vcproj
--- a/projects/openttd_vs80.vcproj
+++ b/projects/openttd_vs80.vcproj
@@ -1452,6 +1452,10 @@
>
+
+
@@ -2404,10 +2408,6 @@
>
-
-
diff --git a/projects/openttd_vs90.vcproj b/projects/openttd_vs90.vcproj
--- a/projects/openttd_vs90.vcproj
+++ b/projects/openttd_vs90.vcproj
@@ -1449,6 +1449,10 @@
>
+
+
@@ -2401,10 +2405,6 @@
>
-
-
diff --git a/source.list b/source.list
--- a/source.list
+++ b/source.list
@@ -288,6 +288,7 @@ signs_func.h
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.cpp
misc/dbg_helpers.h
misc/fixedsizearray.hpp
misc/hashtable.hpp
-misc/smallvec.h
misc/str.hpp
misc/strapi.hpp
diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp
new file mode 100644
--- /dev/null
+++ b/src/core/smallvec_type.hpp
@@ -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 --git a/src/fios.h b/src/fios.h
--- a/src/fios.h
+++ b/src/fios.h
@@ -6,7 +6,7 @@
#define FIOS_H
#include "strings_type.h"
-#include "misc/smallvec.h"
+#include "core/smallvec_type.hpp"
enum {
/**
diff --git a/src/misc/smallvec.h b/src/misc/smallvec.h
deleted file mode 100644
--- 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
-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 --git a/src/sortlist_type.h b/src/sortlist_type.h
--- a/src/sortlist_type.h
+++ b/src/sortlist_type.h
@@ -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 --git a/src/vehiclelist.h b/src/vehiclelist.h
--- a/src/vehiclelist.h
+++ b/src/vehiclelist.h
@@ -5,7 +5,7 @@
#ifndef VEHICLELIST_H
#define VEHICLELIST_H
-#include "misc/smallvec.h"
+#include "core/smallvec_type.hpp"
typedef SmallVector VehicleList;
diff --git a/src/viewport.cpp b/src/viewport.cpp
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -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"