From 4e13529adbaeea125ba1b26d05ecf90e6ebc65af Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Fri, 8 Apr 2022 09:58:05 +0200 Subject: [PATCH] registry: ctor that reserves enough memory for count pools --- src/entt/entity/registry.hpp | 28 +++++++++++++++++++++++----- test/entt/entity/registry.cpp | 12 ++++++++++++ 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/entt/entity/registry.hpp b/src/entt/entity/registry.hpp index 39b7b748b..c743088d1 100644 --- a/src/entt/entity/registry.hpp +++ b/src/entt/entity/registry.hpp @@ -333,7 +333,25 @@ public: using context = internal::registry_context; /*! @brief Default constructor. */ - basic_registry() = default; + basic_registry() + : pools{}, + groups{}, + entities{}, + free_list{tombstone}, + vars{} {} + + /** + * @brief Allocates enough memory upon construction to store `count` pools. + * @param count The number of pools to allocate memory for. + */ + basic_registry(const size_type count) + : pools{}, + groups{}, + entities{}, + free_list{tombstone}, + vars{} { + pools.reserve(count); + } /** * @brief Move constructor. @@ -1465,10 +1483,10 @@ public: } private: - dense_map, identity> pools{}; - std::vector groups{}; - std::vector entities{}; - entity_type free_list{tombstone}; + dense_map, identity> pools; + std::vector groups; + std::vector entities; + entity_type free_list; context vars; }; diff --git a/test/entt/entity/registry.cpp b/test/entt/entity/registry.cpp index 6fe7dbc21..f5639de7d 100644 --- a/test/entt/entity/registry.cpp +++ b/test/entt/entity/registry.cpp @@ -337,6 +337,18 @@ TEST(Registry, Functionalities) { ASSERT_TRUE(registry.storage().empty()); } +TEST(Registry, Constructors) { + entt::registry registry; + entt::registry other{42}; + const entt::entity entity = entt::tombstone; + + ASSERT_TRUE(registry.empty()); + ASSERT_TRUE(other.empty()); + + ASSERT_EQ(registry.released(), entity); + ASSERT_EQ(other.released(), entity); +} + TEST(Registry, Move) { entt::registry registry; const auto entity = registry.create();