From f8a972a3c69132bd54d4f85938cd00ca1258332c Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Fri, 31 Mar 2023 09:05:02 +0200 Subject: [PATCH] signal: drop sink::before --- docs/md/signal.md | 9 ---- src/entt/signal/sigh.hpp | 86 +-------------------------------------- test/entt/signal/sigh.cpp | 76 ---------------------------------- 3 files changed, 2 insertions(+), 169 deletions(-) diff --git a/docs/md/signal.md b/docs/md/signal.md index d9b70f440..d4694fa09 100644 --- a/docs/md/signal.md +++ b/docs/md/signal.md @@ -325,15 +325,6 @@ As shown above, listeners don't have to strictly follow the signature of the signal. As long as a listener can be invoked with the given arguments to yield a result that is convertible to the given return type, everything works just fine.
-It's also possible to connect a listener before other elements already contained -by the signal. The `before` function returns a `sink` object that is correctly -initialized for the purpose and can be used to connect one or more listeners in -order and in the desired position: - -```cpp -sink.before<&foo>().connect<&listener::bar>(instance); -``` - In all cases, the `connect` member function returns by default a `connection` object to be used as an alternative to break a connection by means of its `release` member function.
diff --git a/src/entt/signal/sigh.hpp b/src/entt/signal/sigh.hpp index 05002f30e..8bc860c4c 100644 --- a/src/entt/signal/sigh.hpp +++ b/src/entt/signal/sigh.hpp @@ -372,23 +372,13 @@ class sink> { sink{*static_cast(signal)}.disconnect(); } - auto before(delegate_type call) { - const auto &calls = signal->calls; - const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call)); - - sink other{*this}; - other.offset = calls.cend() - it; - return other; - } - public: /** * @brief Constructs a sink that is allowed to modify a given signal. * @param ref A valid reference to a signal object. */ sink(sigh &ref) noexcept - : offset{}, - signal{&ref} {} + : signal{&ref} {} /** * @brief Returns false if at least a listener is connected to the sink. @@ -398,77 +388,6 @@ public: return signal->calls.empty(); } - /** - * @brief Returns a sink that connects before a given free function or an - * unbound member. - * @tparam Function A valid free function pointer. - * @return A properly initialized sink object. - */ - template - [[nodiscard]] sink before() { - delegate_type call{}; - call.template connect(); - return before(std::move(call)); - } - - /** - * @brief Returns a sink that connects before a free function with payload - * or a bound member. - * @tparam Candidate Member or free function to look for. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - * @return A properly initialized sink object. - */ - template - [[nodiscard]] sink before(Type &&value_or_instance) { - delegate_type call{}; - call.template connect(value_or_instance); - return before(std::move(call)); - } - - /** - * @brief Returns a sink that connects before a given instance or specific - * payload. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - * @return A properly initialized sink object. - */ - template>, void>, sink>> - [[nodiscard]] sink before(Type &value_or_instance) { - return before(&value_or_instance); - } - - /** - * @brief Returns a sink that connects before a given instance or specific - * payload. - * @param value_or_instance A valid pointer that fits the purpose. - * @return A properly initialized sink object. - */ - [[nodiscard]] sink before(const void *value_or_instance) { - sink other{*this}; - - if(value_or_instance) { - const auto &calls = signal->calls; - const auto it = std::find_if(calls.cbegin(), calls.cend(), [value_or_instance](const auto &delegate) { - return delegate.data() == value_or_instance; - }); - - other.offset = calls.cend() - it; - } - - return other; - } - - /** - * @brief Returns a sink that connects before anything else. - * @return A properly initialized sink object. - */ - [[nodiscard]] sink before() { - sink other{*this}; - other.offset = signal->calls.size(); - return other; - } - /** * @brief Connects a free function (with or without payload), a bound or an * unbound member to a signal. @@ -483,7 +402,7 @@ public: delegate_type call{}; call.template connect(value_or_instance...); - signal->calls.insert(signal->calls.end() - offset, std::move(call)); + signal->calls.push_back(std::move(call)); delegate conn{}; conn.template connect<&release>(value_or_instance...); @@ -524,7 +443,6 @@ public: } private: - difference_type offset; signal_type *signal; }; diff --git a/test/entt/signal/sigh.cpp b/test/entt/signal/sigh.cpp index b9b3c1797..ad3fd6596 100644 --- a/test/entt/signal/sigh.cpp +++ b/test/entt/signal/sigh.cpp @@ -427,82 +427,6 @@ TEST_F(SigH, ConstNonConstNoExcept) { ASSERT_EQ(cfunctor.cnt, 2); } -TEST_F(SigH, BeforeFunction) { - entt::sigh sigh; - entt::sink sink{sigh}; - before_after functor; - - sink.connect<&before_after::add>(functor); - sink.connect<&before_after::static_add>(); - sink.before<&before_after::static_add>().connect<&before_after::mul>(functor); - sigh.publish(2); - - ASSERT_EQ(functor.value, 6); -} - -TEST_F(SigH, BeforeMemberFunction) { - entt::sigh sigh; - entt::sink sink{sigh}; - before_after functor; - - sink.connect<&before_after::static_add>(); - sink.connect<&before_after::add>(functor); - sink.before<&before_after::add>(functor).connect<&before_after::mul>(functor); - sigh.publish(2); - - ASSERT_EQ(functor.value, 6); -} - -TEST_F(SigH, BeforeFunctionWithPayload) { - entt::sigh sigh; - entt::sink sink{sigh}; - before_after functor; - - sink.connect<&before_after::static_add>(); - sink.connect<&before_after::static_mul>(functor); - sink.before<&before_after::static_mul>(functor).connect<&before_after::add>(functor); - sigh.publish(2); - - ASSERT_EQ(functor.value, 8); -} - -TEST_F(SigH, BeforeInstanceOrPayload) { - entt::sigh sigh; - entt::sink sink{sigh}; - before_after functor; - - sink.connect<&before_after::static_mul>(functor); - sink.connect<&before_after::add>(functor); - sink.before(functor).connect<&before_after::static_add>(); - sigh.publish(2); - - ASSERT_EQ(functor.value, 6); -} - -TEST_F(SigH, BeforeAnythingElse) { - entt::sigh sigh; - entt::sink sink{sigh}; - before_after functor; - - sink.connect<&before_after::add>(functor); - sink.before().connect<&before_after::mul>(functor); - sigh.publish(2); - - ASSERT_EQ(functor.value, 2); -} - -TEST_F(SigH, BeforeListenerNotPresent) { - entt::sigh sigh; - entt::sink sink{sigh}; - before_after functor; - - sink.connect<&before_after::mul>(functor); - sink.before<&before_after::add>(&functor).connect<&before_after::add>(functor); - sigh.publish(2); - - ASSERT_EQ(functor.value, 2); -} - TEST_F(SigH, UnboundDataMember) { sigh_listener listener; entt::sigh sigh;