From b1165d784c446dc505a100d861cb5151bebdda15 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 22 Oct 2022 16:03:10 +0200 Subject: serializer work --- src/world.hpp | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/world.hpp b/src/world.hpp index 6321606e..24a77d11 100644 --- a/src/world.hpp +++ b/src/world.hpp @@ -12,15 +12,6 @@ struct chunk; struct world final { - std::shared_ptr operator[](chunk_coords c) noexcept; - std::tuple, tile&> operator[](global_coords pt) noexcept; - bool contains(chunk_coords c) const noexcept; - void clear(); - void collect(); - - world(); - fm_DECLARE_DELETED_COPY_ASSIGNMENT(world); - private: void maybe_collect(); @@ -30,10 +21,33 @@ private: return int_hash((std::size_t)c.y << 16 | (std::size_t)c.x); }; - std::size_t _last_collection = 0; - std::unordered_map, decltype(hasher)> _chunks{initial_capacity, hasher}; mutable std::optional, chunk_coords>> _last_chunk; + std::size_t _last_collection = 0; + +public: + explicit world(); + + template + explicit world(std::unordered_map, Hash, Alloc, Pred>&& chunks); + + std::shared_ptr operator[](chunk_coords c) noexcept; + std::tuple, tile&> operator[](global_coords pt) noexcept; + bool contains(chunk_coords c) const noexcept; + void clear(); + void collect(); + + [[deprecated]] const auto& chunks() const noexcept { return _chunks; } // only for serialization + + fm_DECLARE_DEPRECATED_COPY_ASSIGNMENT(world); + fm_DECLARE_DEFAULT_MOVE_ASSIGNMENT_(world); }; +template +world::world(std::unordered_map, Hash, Alloc, Pred>&& chunks) : + _chunks{chunks.begin(), chunks.end(), + std::max(initial_capacity, std::size_t(1/max_load_factor * 2 * chunks.size())), + hasher} +{} + } // namespace floormat -- cgit v1.2.3