Browse Source

dispatcher: refine ::trigger API - close #1307

skypjack 8 hours ago
parent
commit
793ea69195

+ 1 - 1
docs/md/signal.md

@@ -445,7 +445,7 @@ to all the listeners registered so far:
 
 ```cpp
 dispatcher.trigger(an_event{42});
-dispatcher.trigger<another_event>();
+dispatcher.trigger(another_event{});
 ```
 
 Listeners are invoked immediately, order of execution is not guaranteed. This

+ 5 - 5
src/entt/signal/dispatcher.hpp

@@ -63,7 +63,7 @@ public:
         return typename signal_type::sink_type{signal};
     }
 
-    void trigger(Type event) {
+    void trigger(Type &event) {
         signal.publish(event);
     }
 
@@ -266,8 +266,8 @@ public:
      * @param value An instance of the given type of event.
      */
     template<typename Type>
-    void trigger(Type &&value = {}) {
-        trigger(type_hash<std::decay_t<Type>>::value(), std::forward<Type>(value));
+    void trigger(Type value) {
+        trigger(type_hash<std::decay_t<Type>>::value(), value);
     }
 
     /**
@@ -277,8 +277,8 @@ public:
      * @param id Name used to map the event queue within the dispatcher.
      */
     template<typename Type>
-    void trigger(const id_type id, Type &&value = {}) {
-        assure<std::decay_t<Type>>(id).trigger(std::forward<Type>(value));
+    void trigger(const id_type id, Type value) {
+        assure<std::decay_t<Type>>(id).trigger(value);
     }
 
     /**

+ 6 - 6
test/entt/signal/dispatcher.cpp

@@ -48,7 +48,7 @@ TEST(Dispatcher, Functionalities) {
     dispatcher.update<non_aggregate>();
 
     dispatcher.sink<test::empty>().connect<&receiver::receive>(receiver);
-    dispatcher.trigger<test::empty>();
+    dispatcher.trigger(test::empty{});
     dispatcher.enqueue<test::empty>();
 
     ASSERT_EQ(dispatcher.size<non_aggregate>(), 0u);
@@ -65,7 +65,7 @@ TEST(Dispatcher, Functionalities) {
     ASSERT_EQ(receiver.cnt, 1);
 
     dispatcher.update<test::empty>();
-    dispatcher.trigger<test::empty>();
+    dispatcher.trigger(test::empty{});
 
     ASSERT_EQ(dispatcher.size<test::empty>(), 0u);
     ASSERT_EQ(dispatcher.size(), 0u);
@@ -88,7 +88,7 @@ TEST(Dispatcher, Functionalities) {
     test::empty event{};
 
     dispatcher.sink<test::empty>().disconnect<&receiver::receive>(receiver);
-    dispatcher.trigger<test::empty>();
+    dispatcher.trigger(test::empty{});
     dispatcher.enqueue(event);
     dispatcher.update();
     dispatcher.trigger(std::as_const(event));
@@ -145,12 +145,12 @@ TEST(Dispatcher, OpaqueDisconnect) {
     receiver receiver{};
 
     dispatcher.sink<test::empty>().connect<&receiver::receive>(receiver);
-    dispatcher.trigger<test::empty>();
+    dispatcher.trigger(test::empty{});
 
     ASSERT_EQ(receiver.cnt, 1);
 
     dispatcher.disconnect(receiver);
-    dispatcher.trigger<test::empty>();
+    dispatcher.trigger(test::empty{});
 
     ASSERT_EQ(receiver.cnt, 1);
 }
@@ -162,7 +162,7 @@ TEST(Dispatcher, NamedQueue) {
     receiver receiver{};
 
     dispatcher.sink<test::empty>("named"_hs).connect<&receiver::receive>(receiver);
-    dispatcher.trigger<test::empty>();
+    dispatcher.trigger(test::empty{});
 
     ASSERT_EQ(receiver.cnt, 0);
 

+ 1 - 1
test/lib/dispatcher/plugin/plugin.cpp

@@ -5,7 +5,7 @@
 CR_EXPORT int cr_main(cr_plugin *ctx, cr_op operation) {
     switch(operation) {
     case CR_STEP:
-        static_cast<entt::dispatcher *>(ctx->userdata)->trigger<test::empty>();
+        static_cast<entt::dispatcher *>(ctx->userdata)->trigger(test::empty{});
         static_cast<entt::dispatcher *>(ctx->userdata)->trigger(test::boxed_int{4});
         break;
     case CR_CLOSE:

+ 1 - 1
test/lib/dispatcher/shared/lib.cpp

@@ -4,6 +4,6 @@
 #include "lib.h"
 
 ENTT_API void trigger(entt::dispatcher &dispatcher) {
-    dispatcher.trigger<test::empty>();
+    dispatcher.trigger(test::empty{});
     dispatcher.trigger(test::boxed_int{2});
 }