From 3cd29575445a7f4b9861f6f80d209244bf58a608 Mon Sep 17 00:00:00 2001 From: smatz Date: Sat, 13 Dec 2008 15:59:25 +0000 Subject: [PATCH] (svn r14669) -Codechange: use SmallVector instead of std::list at one place --- src/core/smallvec_type.hpp | 11 +++++++++++ src/newgrf_engine.cpp | 16 ++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 709ff70f00..464274c4d0 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -44,6 +44,17 @@ public: this->items = 0; } + /** + * Remove all items from the list and free allocated memory. + */ + void Reset() + { + this->items = 0; + this->capacity = 0; + free(data); + data = NULL; + } + /** * Compact the list down to the smallest block size boundary. */ diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index 4679f2b7e4..f7a0587fde 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -28,6 +28,7 @@ #include "rail.h" #include "settings_type.h" #include "aircraft.h" +#include "core/smallvec_type.hpp" #include @@ -1086,15 +1087,14 @@ struct ListOrderChange { EngineID target; }; -static std::list _list_order_changes; +static SmallVector _list_order_changes; void AlterVehicleListOrder(EngineID engine, EngineID target) { /* Add the list order change to a queue */ - ListOrderChange loc; - loc.engine = engine; - loc.target = target; - _list_order_changes.push_back(loc); + ListOrderChange *loc = _list_order_changes.Append(); + loc->engine = engine; + loc->target = target; } void CommitVehicleListOrderChanges() @@ -1103,8 +1103,8 @@ void CommitVehicleListOrderChanges() typedef std::map ListPositionMap; ListPositionMap lptr_map; - std::list::iterator it; - for (it = _list_order_changes.begin(); it != _list_order_changes.end(); ++it) { + const ListOrderChange *end = _list_order_changes.End(); + for (const ListOrderChange *it = _list_order_changes.Begin(); it != end; ++it) { EngineID engine = it->engine; EngineID target = it->target; @@ -1139,5 +1139,5 @@ void CommitVehicleListOrderChanges() } /* Clear out the queue */ - _list_order_changes.clear(); + _list_order_changes.Reset(); }