diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/world.cpp | 7 | ||||
| -rw-r--r-- | src/world.hpp | 2 |
2 files changed, 6 insertions, 3 deletions
diff --git a/src/world.cpp b/src/world.cpp index 89c127cc..1c7c45c9 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -33,9 +33,12 @@ struct world::robin_map_wrapper final : tsl::robin_map<object_id, bptr<object>, world::world(world&& w) noexcept = default; -world::world(std::unordered_map<chunk_coords_, chunk>&& chunks) : - world{std::max(initial_capacity, size_t(1/max_load_factor * 2 * chunks.size()))} +world::world(std::unordered_map<chunk_coords_, chunk, chunk_coords_hasher>&& chunks) { + const auto capʹ = (size_t)(1e-4f + (float)chunks.size() / max_load_factor); + const auto cap = std::max(capʹ, initial_capacity); + _chunks.reserve(cap); + _chunks.max_load_factor(max_load_factor); for (auto&& [coord, c] : chunks) operator[](coord) = move(c); } diff --git a/src/world.hpp b/src/world.hpp index a643de3b..01fc5cc9 100644 --- a/src/world.hpp +++ b/src/world.hpp @@ -67,7 +67,7 @@ private: public: explicit world(); ~world() noexcept; - explicit world(std::unordered_map<chunk_coords_, chunk>&& chunks); + explicit world(std::unordered_map<chunk_coords_, chunk, chunk_coords_hasher>&& chunks); struct pair_chunk_tile final { chunk& c; tile_ref t; }; // NOLINT |
