diff --git a/source/RobotAPI/libraries/armem/core/base/EntityBase.h b/source/RobotAPI/libraries/armem/core/base/EntityBase.h index 6d2a3a8ded0b9c53d87703a7ed377438493ff4ce..39dcc12c92902bad4c7a2e0c9cb7385de8e0a40c 100644 --- a/source/RobotAPI/libraries/armem/core/base/EntityBase.h +++ b/source/RobotAPI/libraries/armem/core/base/EntityBase.h @@ -268,33 +268,6 @@ namespace armarx::armem::base return "entity"; } - virtual _Derived copy() const override - { - _Derived d; - this->_copySelf(d); - return d; - } - - virtual _Derived copyEmpty() const override - { - _Derived d; - this->_copySelfEmpty(d); - return d; - } - - - protected: - - virtual void _copySelf(DerivedT& other) const override - { - Base::_copySelf(other); - } - - virtual void _copySelfEmpty(DerivedT& other) const override - { - Base::_copySelfEmpty(other); - } - private: diff --git a/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h b/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h index 4e2471f3d7efadbdc47139acf413a8933cad5460..aab70193435c7eec54b9e2127e7c57528ebba842 100644 --- a/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h +++ b/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h @@ -46,14 +46,6 @@ namespace armarx::armem::base return id().instanceIndex; } - // Copying - virtual DerivedT copy() const - { - DerivedT d; - this->_copySelf(d); - return d; - } - /** * @brief Fill `*this` with the update's values. * @param update The update. @@ -64,6 +56,13 @@ namespace armarx::armem::base virtual bool equalsDeep(const DerivedT& other) const = 0; + virtual DerivedT copy() const + { + DerivedT d; + this->_copySelf(d); + return d; + } + std::string getLevelName() const override { diff --git a/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp b/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp index b7fffdbff9dc0641f67b6fb83b2fb97849a7f61b..5eabdd345ab01affb5400f856e4567dea108a4bb 100644 --- a/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp +++ b/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp @@ -766,3 +766,53 @@ BOOST_AUTO_TEST_CASE(test_history_size_in_provider_segment) } } + + +template <class T> +struct CopyTest +{ + CopyTest() + { + } + + void test() + { + // At least check whether they can be called. + T t; + T t2 = t.copy(); + + if constexpr (std::is_base_of_v<armem::base::EntityInstanceBase<T>, T>) + { + t2 = t.copyEmpty(); + } + } +}; + + +BOOST_AUTO_TEST_CASE(test_copy) +{ + { + CopyTest<armem::wm::EntityInstance>().test(); + CopyTest<armem::wm::EntitySnapshot>().test(); + CopyTest<armem::wm::Entity>().test(); + CopyTest<armem::wm::ProviderSegment>().test(); + CopyTest<armem::wm::CoreSegment>().test(); + CopyTest<armem::wm::Memory>().test(); + } + { + CopyTest<armem::ltm::EntityInstance>().test(); + CopyTest<armem::ltm::EntitySnapshot>().test(); + CopyTest<armem::ltm::Entity>().test(); + CopyTest<armem::ltm::ProviderSegment>().test(); + CopyTest<armem::ltm::CoreSegment>().test(); + CopyTest<armem::ltm::Memory>().test(); + } + { + CopyTest<armem::d_ltm::EntityInstance>().test(); + CopyTest<armem::d_ltm::EntitySnapshot>().test(); + CopyTest<armem::d_ltm::Entity>().test(); + CopyTest<armem::d_ltm::ProviderSegment>().test(); + CopyTest<armem::d_ltm::CoreSegment>().test(); + CopyTest<armem::d_ltm::Memory>().test(); + } +}