summaryrefslogtreecommitdiffhomepage
path: root/serialize/world-writer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'serialize/world-writer.cpp')
-rw-r--r--serialize/world-writer.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/serialize/world-writer.cpp b/serialize/world-writer.cpp
index 23381ab8..2e1c7daa 100644
--- a/serialize/world-writer.cpp
+++ b/serialize/world-writer.cpp
@@ -21,6 +21,7 @@
#include <algorithm>
#include <string_view>
#include <tsl/robin_map.h>
+#include <Corrade/Containers/Array.h>
#include <Corrade/Containers/StringStlHash.h>
#include <Corrade/Utility/Path.h>
@@ -303,15 +304,20 @@ void writer_state::serialize_strings()
{
static_assert(critter_name_max <= string_max);
auto len = 0uz;
- for (const auto& [k, v] : string_map)
+
+ Array<StringView> sorted_strings{string_map.size()};
+ for (auto [s, i] : string_map)
+ sorted_strings[i] = s;
+
+ for (const auto& k : sorted_strings)
{
fm_assert(k.size()+1 < string_max);
len += k.size()+1;
}
string_buf.resize(sizeof(uint32_t) + len);
auto s = binary_writer{string_buf.begin()};
- s << (uint32_t)string_map.size();
- for (const auto& [k, v] : string_map)
+ s << (uint32_t)sorted_strings.size();
+ for (const auto& k : sorted_strings)
{
fm_assert(k.size() < string_max);
s.write_asciiz_string(k);