From 39bf5fdc050bde0c7a92d84842ba3874fbdeedd2 Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Sat, 25 May 2019 21:43:58 +0200 Subject: [PATCH] minor changes --- src/entt/entity/sparse_set.hpp | 43 ++++++++++++++-------------------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/src/entt/entity/sparse_set.hpp b/src/entt/entity/sparse_set.hpp index 91fb755a0..aee9baea8 100644 --- a/src/entt/entity/sparse_set.hpp +++ b/src/entt/entity/sparse_set.hpp @@ -155,10 +155,10 @@ class sparse_set { reverse.resize(page+1); } - if(!reverse[page].first) { - reverse[page].first = std::make_unique(entt_per_page); + if(!reverse[page]) { + reverse[page] = std::make_unique(entt_per_page); // null is safe in all cases for our purposes - std::fill_n(reverse[page].first.get(), entt_per_page, null); + std::fill_n(reverse[page].get(), entt_per_page, null); } } @@ -189,10 +189,9 @@ public: direct{other.direct} { for(size_type pos{}, last = other.reverse.size(); pos < last; ++pos) { - if(other.reverse[pos].first) { + if(other.reverse[pos]) { assure(pos); - std::copy_n(other.reverse[pos].first.get(), entt_per_page, reverse[pos].first.get()); - reverse[pos].second = other.reverse[pos].second; + std::copy_n(other.reverse[pos].get(), entt_per_page, reverse[pos].get()); } } } @@ -243,14 +242,9 @@ public: /*! @brief Requests the removal of unused capacity. */ virtual void shrink_to_fit() { - while(!reverse.empty() && !reverse.back().second) { - reverse.pop_back(); - } - - for(auto &&data: reverse) { - if(!data.second) { - data.first.reset(); - } + // conservative approach + if(direct.empty()) { + reverse.clear(); } reverse.shrink_to_fit(); @@ -364,7 +358,7 @@ public: bool has(const entity_type entt) const ENTT_NOEXCEPT { auto [page, offset] = index(entt); // testing against null permits to avoid accessing the direct vector - return (page < reverse.size() && reverse[page].second && reverse[page].first[offset] != null); + return (page < reverse.size() && reverse[page] && reverse[page][offset] != null); } /** @@ -382,7 +376,7 @@ public: size_type get(const entity_type entt) const ENTT_NOEXCEPT { ENTT_ASSERT(has(entt)); auto [page, offset] = index(entt); - return size_type(reverse[page].first[offset]); + return size_type(reverse[page][offset]); } /** @@ -400,8 +394,7 @@ public: ENTT_ASSERT(!has(entt)); auto [page, offset] = index(entt); assure(page); - reverse[page].first[offset] = entity_type(direct.size()); - reverse[page].second++; + reverse[page][offset] = entity_type(direct.size()); direct.push_back(entt); } @@ -424,8 +417,7 @@ public: ENTT_ASSERT(!has(entt)); auto [page, offset] = index(entt); assure(page); - reverse[page].first[offset] = next++; - reverse[page].second++; + reverse[page][offset] = next++; }); direct.insert(direct.end(), first, last); @@ -446,10 +438,9 @@ public: ENTT_ASSERT(has(entt)); auto [from_page, from_offset] = index(entt); auto [to_page, to_offset] = index(direct.back()); - direct[size_type(reverse[from_page].first[from_offset])] = direct.back(); - reverse[to_page].first[to_offset] = reverse[from_page].first[from_offset]; - reverse[from_page].first[from_offset] = null; - reverse[from_page].second--; + direct[size_type(reverse[from_page][from_offset])] = direct.back(); + reverse[to_page][to_offset] = reverse[from_page][from_offset]; + reverse[from_page][from_offset] = null; direct.pop_back(); } @@ -473,7 +464,7 @@ public: ENTT_ASSERT(rhs < direct.size()); auto [src_page, src_offset] = index(direct[lhs]); auto [dst_page, dst_offset] = index(direct[rhs]); - std::swap(reverse[src_page].first[src_offset], reverse[dst_page].first[dst_offset]); + std::swap(reverse[src_page][src_offset], reverse[dst_page][dst_offset]); std::swap(direct[lhs], direct[rhs]); } @@ -524,7 +515,7 @@ public: } private: - std::vector, size_type>> reverse; + std::vector> reverse; std::vector direct; };