summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/world.cpp7
-rw-r--r--src/world.hpp2
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