Sfoglia il codice sorgente

storage: disambiguate calls to ::construct (see #438)

Michele Caini 6 anni fa
parent
commit
d8f289182d
1 ha cambiato i file con 44 aggiunte e 8 eliminazioni
  1. 44 8
      src/entt/entity/storage.hpp

+ 44 - 8
src/entt/entity/storage.hpp

@@ -317,7 +317,7 @@ public:
      * @param args Parameters to use to construct an object for the entity.
      */
     template<typename... Args>
-    void construct(const entity_type entt, Args &&... args) {
+    void emplace(const entity_type entt, Args &&... args) {
         if constexpr(std::is_aggregate_v<object_type>) {
             instances.push_back(Type{std::forward<Args>(args)...});
         } else {
@@ -328,6 +328,13 @@ public:
         underlying_type::construct(entt);
     }
 
+    /*! @copydoc emplace */
+    template<typename... Args>
+    [[deprecated("use ::emplace instead")]]
+    void construct(const entity_type entt, Args &&... args) {
+        emplace(entt, std::forward<Args>(args)...);
+    }
+
     /**
      * @brief Assigns one or more entities to a storage and constructs their
      * objects from a given instance.
@@ -344,13 +351,20 @@ public:
      * @param value An instance of the object to construct.
      */
     template<typename It>
-    std::enable_if_t<std::is_same_v<typename std::iterator_traits<It>::value_type, entity_type>, void>
-    construct(It first, It last, const object_type &value = {}) {
+    void insert(It first, It last, const object_type &value = {}) {
         instances.insert(instances.end(), std::distance(first, last), value);
         // entities go after components in case constructors throw
         underlying_type::construct(first, last);
     }
 
+    /*! @copydoc insert */
+    template<typename It>
+    [[deprecated("use ::insert instead")]]
+    std::enable_if_t<std::is_same_v<typename std::iterator_traits<It>::value_type, entity_type>, void>
+    construct(It first, It last, const object_type &value = {}) {
+        insert(std::move(first), std::move(last), value);
+    }
+
     /**
      * @brief Assigns one or more entities to a storage and constructs their
      * objects from a given range.
@@ -364,13 +378,20 @@ public:
      * @param value An iterator to the first element of the range of objects.
      */
     template<typename EIt, typename CIt>
-    std::enable_if_t<std::is_same_v<typename std::iterator_traits<EIt>::value_type, entity_type>, void>
-    construct(EIt first, EIt last, CIt value) {
+    void insert(EIt first, EIt last, CIt value) {
         instances.insert(instances.end(), value, value + std::distance(first, last));
         // entities go after components in case constructors throw
         underlying_type::construct(first, last);
     }
 
+    /*! @copydoc insert */
+    template<typename EIt, typename CIt>
+    [[deprecated("use ::insert instead")]]
+    std::enable_if_t<std::is_same_v<typename std::iterator_traits<EIt>::value_type, entity_type>, void>
+    construct(EIt first, EIt last, CIt value) {
+        insert(std::move(first), std::move(last), std::move(value));
+    }
+
     /**
      * @brief Removes an entity from a storage and destroys its object.
      *
@@ -675,10 +696,18 @@ public:
      * @param entt A valid entity identifier.
      */
     template<typename... Args>
-    void construct(const entity_type entt, Args &&...) {
+    void emplace(const entity_type entt, Args &&...) {
         underlying_type::construct(entt);
     }
 
+    /*! @copydoc emplace */
+    template<typename... Args>
+    [[deprecated("use ::emplace instead")]]
+    void construct(const entity_type entt, Args &&... args) {
+        emplace(entt, std::forward<Args>(args)...);
+    }
+
+
     /**
      * @brief Assigns one or more entities to a storage.
      *
@@ -693,11 +722,18 @@ public:
      * @param last An iterator past the last element of the range of entities.
      */
     template<typename It>
-    std::enable_if_t<std::is_same_v<typename std::iterator_traits<It>::value_type, entity_type>, void>
-    construct(It first, It last, const object_type & = {}) {
+    void insert(It first, It last, const object_type & = {}) {
         underlying_type::construct(first, last);
     }
 
+    /*! @copydoc insert */
+    template<typename It>
+    [[deprecated("use ::insert instead")]]
+    std::enable_if_t<std::is_same_v<typename std::iterator_traits<It>::value_type, entity_type>, void>
+    construct(It first, It last, const object_type &value = {}) {
+        insert(std::move(first), std::move(last), value);
+    }
+
     /*! @copydoc storage::sort */
     template<typename Compare, typename Sort = std_sort, typename... Args>
     void sort(iterator_type first, iterator_type last, Compare compare, Sort algo = Sort{}, Args &&... args) {