summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/smallmap_type.hpp12
-rw-r--r--src/newgrf_engine.cpp3
2 files changed, 15 insertions, 0 deletions
diff --git a/src/core/smallmap_type.hpp b/src/core/smallmap_type.hpp
index 681cacdff..cc2533dd0 100644
--- a/src/core/smallmap_type.hpp
+++ b/src/core/smallmap_type.hpp
@@ -96,6 +96,18 @@ struct SmallMap : SmallVector<SmallPair<T, U>, S> {
n->first = key;
return n->second;
}
+
+ FORCEINLINE void SortByKey()
+ {
+ qsort(this->Begin(), this->items, sizeof(Pair), KeySorter);
+ }
+
+ static int CDECL KeySorter(const void *a, const void *b)
+ {
+ const Pair *pa = (const Pair*)a;
+ const Pair *pb = (const Pair*)b;
+ return pa->first - pb->first;
+ }
};
#endif /* SMALLMAP_TYPE_HPP */
diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp
index 3b950dc8a..75a082429 100644
--- a/src/newgrf_engine.cpp
+++ b/src/newgrf_engine.cpp
@@ -1114,6 +1114,9 @@ void CommitVehicleListOrderChanges()
}
}
+ /* std::map sorted by default, SmallMap does not */
+ lptr_map.SortByKey();
+
/* Get the target position, if it exists */
if (target_e != NULL) {
uint16 target_position = target_e->list_position;