Browse Source

delegate: target member function

Michele Caini 3 years ago
parent
commit
bea7b43a1a
2 changed files with 13 additions and 0 deletions
  1. 8 0
      src/entt/signal/delegate.hpp
  2. 5 0
      test/entt/signal/delegate.cpp

+ 8 - 0
src/entt/signal/delegate.hpp

@@ -233,6 +233,14 @@ public:
         fn = nullptr;
     }
 
+    /**
+     * @brief Returns a pointer to the stored callable function target, if any.
+     * @return An opaque pointer to the stored callable function target.
+     */
+    [[nodiscard]] function_type *target() const noexcept {
+        return fn;
+    }
+
     /**
      * @brief Returns the instance or the payload linked to a delegate, if any.
      * @return An opaque pointer to the underlying data.

+ 5 - 0
test/entt/signal/delegate.cpp

@@ -190,6 +190,8 @@ TEST(Delegate, Comparison) {
     rhs.connect<&delegate_functor::operator()>(functor);
 
     ASSERT_EQ(rhs, (entt::delegate<int(int)>{entt::connect_arg<&delegate_functor::operator()>, functor}));
+    ASSERT_EQ(lhs.target(), rhs.target());
+    ASSERT_EQ(lhs.data(), rhs.data());
     ASSERT_FALSE(lhs != rhs);
     ASSERT_TRUE(lhs == rhs);
     ASSERT_EQ(lhs, rhs);
@@ -197,6 +199,7 @@ TEST(Delegate, Comparison) {
     lhs.connect<&delegate_functor::operator()>(other);
 
     ASSERT_EQ(lhs, (entt::delegate<int(int)>{entt::connect_arg<&delegate_functor::operator()>, other}));
+    ASSERT_EQ(lhs.target(), rhs.target());
     ASSERT_NE(lhs.data(), rhs.data());
     ASSERT_TRUE(lhs != rhs);
     ASSERT_FALSE(lhs == rhs);
@@ -205,6 +208,8 @@ TEST(Delegate, Comparison) {
     lhs.connect([](const void *ptr, int val) { return static_cast<const delegate_functor *>(ptr)->identity(val) * val; }, &functor);
 
     ASSERT_NE(lhs, (entt::delegate<int(int)>{[](const void *, int val) { return val + val; }, &functor}));
+    ASSERT_NE(lhs.target(), rhs.target());
+    ASSERT_EQ(lhs.data(), rhs.data());
     ASSERT_TRUE(lhs != rhs);
     ASSERT_FALSE(lhs == rhs);
     ASSERT_NE(lhs, rhs);