Jelajahi Sumber

registry: propagate allocator to context

Michele Caini 3 tahun lalu
induk
melakukan
d56e5a269c
1 mengubah file dengan 9 tambahan dan 6 penghapusan
  1. 9 6
      src/entt/entity/registry.hpp

+ 9 - 6
src/entt/entity/registry.hpp

@@ -157,12 +157,15 @@ template<typename ILhs, typename IRhs>
     return !(lhs < rhs);
 }
 
+template<typename Allocator>
 class registry_context {
-    using key_type = id_type;
-    using mapped_type = basic_any<0u>;
-    using container_type = dense_map<key_type, mapped_type, identity>;
+    using alloc_traits = typename std::allocator_traits<Allocator>;
+    using allocator_type = typename alloc_traits::template rebind_alloc<std::pair<const id_type, basic_any<0u>>>;
 
 public:
+    explicit registry_context(const allocator_type &allocator)
+        : ctx{allocator} {}
+
     template<typename Type, typename... Args>
     Type &emplace_as(const id_type id, Args &&...args) {
         return any_cast<Type &>(ctx.try_emplace(id, std::in_place_type<Type>, std::forward<Args>(args)...).first->second);
@@ -218,7 +221,7 @@ public:
     }
 
 private:
-    container_type ctx;
+    dense_map<id_type, basic_any<0u>, identity, std::equal_to<id_type>, allocator_type> ctx;
 };
 
 } // namespace internal
@@ -361,7 +364,7 @@ public:
     /*! @brief Common type among all storage types. */
     using base_type = basic_common_type;
     /*! @brief Context type. */
-    using context = internal::registry_context;
+    using context = internal::registry_context<allocator_type>;
 
     /*! @brief Default constructor. */
     basic_registry()
@@ -380,7 +383,7 @@ public:
      * @param allocator The allocator to use.
      */
     basic_registry(const size_type count, const allocator_type &allocator = allocator_type{})
-        : vars{},
+        : vars{allocator},
           free_list{tombstone},
           epool{allocator},
           pools{allocator},