Selaa lähdekoodia

added get_or_assign (close #202)

Michele Caini 7 vuotta sitten
vanhempi
commit
dcbf6e43c7
3 muutettua tiedostoa jossa 9 lisäystä ja 7 poistoa
  1. 1 0
      AUTHORS
  2. 5 4
      src/entt/entity/registry.hpp
  3. 3 3
      test/entt/entity/registry.cpp

+ 1 - 0
AUTHORS

@@ -10,6 +10,7 @@ ceeac
 corystegel
 corystegel
 Croydon
 Croydon
 dbacchet
 dbacchet
+dBagrat
 djarek
 djarek
 DonKult
 DonKult
 drglove
 drglove

+ 5 - 4
src/entt/entity/registry.hpp

@@ -788,16 +788,17 @@ public:
      * invalid entity.
      * invalid entity.
      *
      *
      * @tparam Component Type of component to get.
      * @tparam Component Type of component to get.
+     * @tparam Args Types of arguments to use to construct the component.
      * @param entity A valid entity identifier.
      * @param entity A valid entity identifier.
-     * @param component Instance to use to construct the component.
+     * @param args Parameters to use to initialize the component.
      * @return Reference to the component owned by the entity.
      * @return Reference to the component owned by the entity.
      */
      */
-    template<typename Component>
-    Component & get(const entity_type entity, Component &&component) ENTT_NOEXCEPT {
+    template<typename Component, typename... Args>
+    Component & get_or_assign(const entity_type entity, Args &&... args) ENTT_NOEXCEPT {
         assert(valid(entity));
         assert(valid(entity));
         auto *cpool = assure<std::remove_reference_t<Component>>();
         auto *cpool = assure<std::remove_reference_t<Component>>();
         auto *comp = cpool->try_get(entity);
         auto *comp = cpool->try_get(entity);
-        return comp ? *comp : cpool->construct(entity, std::forward<Component>(component));
+        return comp ? *comp : cpool->construct(entity, std::forward<Args>(args)...);
     }
     }
 
 
     /**
     /**

+ 3 - 3
test/entt/entity/registry.cpp

@@ -160,8 +160,8 @@ TEST(Registry, Functionalities) {
 
 
     const auto e3 = registry.create();
     const auto e3 = registry.create();
 
 
-    ASSERT_EQ(registry.get<int>(e3, 3), 3);
-    ASSERT_EQ(registry.get<char>(e3, 'c'), 'c');
+    ASSERT_EQ(registry.get_or_assign<int>(e3, 3), 3);
+    ASSERT_EQ(registry.get_or_assign<char>(e3, 'c'), 'c');
 
 
     ASSERT_EQ(registry.size<int>(), entt::registry<>::size_type{1});
     ASSERT_EQ(registry.size<int>(), entt::registry<>::size_type{1});
     ASSERT_EQ(registry.size<char>(), entt::registry<>::size_type{1});
     ASSERT_EQ(registry.size<char>(), entt::registry<>::size_type{1});
@@ -1197,7 +1197,7 @@ TEST(Registry, Clone) {
 TEST(Registry, GetOrAssign) {
 TEST(Registry, GetOrAssign) {
     entt::registry<> registry;
     entt::registry<> registry;
     const auto entity = registry.create();
     const auto entity = registry.create();
-    const auto value = registry.get<int>(entity, 3);
+    const auto value = registry.get_or_assign<int>(entity, 3);
     ASSERT_TRUE(registry.has<int>(entity));
     ASSERT_TRUE(registry.has<int>(entity));
     ASSERT_EQ(registry.get<int>(entity), value);
     ASSERT_EQ(registry.get<int>(entity), value);
     ASSERT_EQ(registry.get<int>(entity), 3);
     ASSERT_EQ(registry.get<int>(entity), 3);