From d766c39791e577bb413ec10ad38bc27a11491d4d Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Fri, 11 Sep 2020 16:30:09 +0200 Subject: [PATCH] *: minor changes --- src/entt/entity/pool.hpp | 12 ++++-- src/entt/entity/registry.hpp | 12 +++--- src/entt/entity/sparse_set.hpp | 7 ++-- test/benchmark/benchmark.cpp | 73 +++++++++++++++++++++++++++++++--- 4 files changed, 87 insertions(+), 17 deletions(-) diff --git a/src/entt/entity/pool.hpp b/src/entt/entity/pool.hpp index 9c1ed3e7e..6e26cd3d9 100644 --- a/src/entt/entity/pool.hpp +++ b/src/entt/entity/pool.hpp @@ -45,7 +45,9 @@ struct default_pool final: storage { storage::insert(first, last, std::forward(args)...); if(!construction.empty()) { - while(first != last) { construction.publish(*(first++)); } + for(; first != last; ++first) { + construction.publish(*first); + } } } @@ -58,12 +60,16 @@ struct default_pool final: storage { void erase(It first, It last) { if(std::distance(first, last) == std::distance(this->begin(), this->end())) { if(!destruction.empty()) { - while(first != last) { destruction.publish(*(first++)); } + for(; first != last; ++first) { + destruction.publish(*first); + } } this->clear(); } else { - while(first != last) { this->erase(*(first++)); } + for(; first != last; ++first) { + this->erase(*first); + } } } diff --git a/src/entt/entity/registry.hpp b/src/entt/entity/registry.hpp index 1e2c34a7d..d41213332 100644 --- a/src/entt/entity/registry.hpp +++ b/src/entt/entity/registry.hpp @@ -458,12 +458,12 @@ public: */ template void create(It first, It last) { - while(destroyed != null && first != last) { - *(first++) = recycle_identifier(); + for(; destroyed != null && first != last; ++first) { + *first = recycle_identifier(); } - while(first != last) { - *(first++) = generate_identifier(); + for(; first != last; ++first) { + *first = generate_identifier(); } } @@ -541,7 +541,9 @@ public: */ template void destroy(It first, It last) { - while(first != last) { destroy(*(first++)); } + for(; first != last; ++first) { + destroy(*first); + } } /** diff --git a/src/entt/entity/sparse_set.hpp b/src/entt/entity/sparse_set.hpp index d156affbf..d85df1b91 100644 --- a/src/entt/entity/sparse_set.hpp +++ b/src/entt/entity/sparse_set.hpp @@ -408,10 +408,9 @@ public: auto next = static_cast(packed.size()); packed.insert(packed.end(), first, last); - while(first != last) { - const auto entt = *(first++); - ENTT_ASSERT(!contains(entt)); - assure(page(entt))[offset(entt)] = entity_type{next++}; + for(; first != last; ++first) { + ENTT_ASSERT(!contains(*first)); + assure(page(*first))[offset(*first)] = entity_type{next++}; } } diff --git a/test/benchmark/benchmark.cpp b/test/benchmark/benchmark.cpp index f64776302..564979fd7 100644 --- a/test/benchmark/benchmark.cpp +++ b/test/benchmark/benchmark.cpp @@ -120,6 +120,54 @@ TEST(Benchmark, CreateManyWithComponents) { timer.elapsed(); } +TEST(Benchmark, Remove) { + entt::registry registry; + std::vector entities(1000000); + + std::cout << "Removing 1000000 components from their entities" << std::endl; + + registry.create(entities.begin(), entities.end()); + registry.insert(entities.begin(), entities.end()); + + timer timer; + + for(auto entity: registry.view()) { + registry.remove(entity); + } + + timer.elapsed(); +} + +TEST(Benchmark, RemoveMany) { + entt::registry registry; + std::vector entities(1000000); + + std::cout << "Removing 999999 components from their entities at once" << std::endl; + + registry.create(entities.begin(), entities.end()); + registry.insert(entities.begin(), entities.end()); + + timer timer; + auto view = registry.view(); + registry.remove(++view.begin(), view.end()); + timer.elapsed(); +} + +TEST(Benchmark, RemoveAll) { + entt::registry registry; + std::vector entities(1000000); + + std::cout << "Removing 1000000 components from their entities at once" << std::endl; + + registry.create(entities.begin(), entities.end()); + registry.insert(entities.begin(), entities.end()); + + timer timer; + auto view = registry.view(); + registry.remove(view.begin(), view.end()); + timer.elapsed(); +} + TEST(Benchmark, Recycle) { entt::registry registry; std::vector entities(1000000); @@ -160,22 +208,37 @@ TEST(Benchmark, RecycleMany) { TEST(Benchmark, Destroy) { entt::registry registry; + std::vector entities(1000000); std::cout << "Destroying 1000000 entities" << std::endl; - for(std::uint64_t i = 0; i < 1000000L; i++) { - registry.create(); - } + registry.create(entities.begin(), entities.end()); + registry.insert(entities.begin(), entities.end()); timer timer; - registry.each([®istry](auto entity) { + for(auto entity: registry.view()) { registry.destroy(entity); - }); + } timer.elapsed(); } +TEST(Benchmark, DestroyMany) { + entt::registry registry; + std::vector entities(1000000); + + std::cout << "Destroying 1000000 entities" << std::endl; + + registry.create(entities.begin(), entities.end()); + registry.insert(entities.begin(), entities.end()); + + timer timer; + auto view = registry.view(); + registry.destroy(view.begin(), view.end()); + timer.elapsed(); +} + TEST(Benchmark, IterateSingleComponent1M) { entt::registry registry;