diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2024-01-20 17:47:03 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2024-01-20 17:47:03 +0100 |
commit | f2b65d72880f5263696985ecbd8a09da919399e8 (patch) | |
tree | 12f1bb3e510891fd8470bfd279963c224001f758 /serialize/world-writer.cpp | |
parent | c5596a0efa5aa940dc3ed4fe4b563ee814015955 (diff) |
w
Diffstat (limited to 'serialize/world-writer.cpp')
-rw-r--r-- | serialize/world-writer.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/serialize/world-writer.cpp b/serialize/world-writer.cpp index 409b06ff..b6e5846b 100644 --- a/serialize/world-writer.cpp +++ b/serialize/world-writer.cpp @@ -404,7 +404,7 @@ ok: do_visit(intern_string(name), f); do_visit(nchunks, f); } - template<typename F> void serialize_strings_(F&& f) + void serialize_strings_() { fm_assert(string_buf.empty()); size_t len = 0; @@ -413,8 +413,10 @@ ok: do_visit(intern_string(name), f); len += s.size() + 1; buffer buf{len}; binary_writer b{&buf.data[0], buf.size}; + b << (uint32_t)string_array.size(); for (const auto& s : string_array) b.write_asciiz_string(s); + fm_assert(b.bytes_written() == b.bytes_allocated()); string_buf = std::move(buf); } @@ -424,9 +426,10 @@ ok: do_visit(intern_string(name), f); fm_assert(atlas_array.empty()); fm_assert(chunk_array.empty()); fm_assert(header_buf.empty()); + fm_assert(string_buf.empty()); for (auto& [coord, c] : non_const(w.chunks())) - chunk_array.push_back(serialized_chunk{.c = &c }); + chunk_array.push_back({.c = &c }); std::sort(chunk_array.begin(), chunk_array.end(), [](const auto& c1, const auto& c2) { auto a = c1.c->coord(), b = c2.c->coord(); @@ -436,19 +439,20 @@ ok: do_visit(intern_string(name), f); for (uint32_t i = 0; auto& [coord, c] : chunk_array) serialize_chunk_(*c, chunk_array[i++].buf); - size_t len = 0; { + size_t len = 0; fm_assert(header_buf.empty()); serialize_header_(size_counter{len}); fm_assert(len > 0); - } - buffer hdr{len}; - { - binary_writer<char*> s{&hdr.data[0], hdr.size}; + + buffer hdr{len}; + binary_writer s{&hdr.data[0], hdr.size}; serialize_header_(byte_writer{s}); fm_assert(s.bytes_written() == s.bytes_allocated()); + header_buf = std::move(hdr); } - header_buf = std::move(hdr); + + serialize_strings_(); } template<typename F> |