diff options
-rw-r--r-- | src/core/smallvec_type.hpp | 11 | ||||
-rw-r--r-- | 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 709ff70f0..464274c4d 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -45,6 +45,17 @@ public: } /** + * 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. */ FORCEINLINE void Compact() diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index 4679f2b7e..f7a0587fd 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 <map> @@ -1086,15 +1087,14 @@ struct ListOrderChange { EngineID target; }; -static std::list<ListOrderChange> _list_order_changes; +static SmallVector<ListOrderChange, 16> _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<uint16, Engine*> ListPositionMap; ListPositionMap lptr_map; - std::list<ListOrderChange>::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(); } |