diff options
author | Murray Cumming <murrayc@murrayc.com> | 2016-04-21 16:16:31 +0200 |
---|---|---|
committer | Murray Cumming <murrayc@murrayc.com> | 2016-04-21 16:19:30 +0200 |
commit | e427deed4c62f73ff28a5f4a7adf4ac713bb3a3a (patch) | |
tree | 77434040253b0667c41e6d6fc3ff000df9d76ab4 | |
parent | fb57d3ff2d5b83e2e701e5bd8f6904ff28d4d0be (diff) | |
download | sigc++-e427deed4c62f73ff28a5f4a7adf4ac713bb3a3a.tar.gz |
signal::connect(): Return a sigc::connection.
Instead of an iterator aliases to a signal<>::connection.
-rw-r--r-- | examples/member_method.cc | 4 | ||||
-rw-r--r-- | sigc++/connection.h | 5 | ||||
-rw-r--r-- | sigc++/signal.h | 12 | ||||
-rw-r--r-- | tests/benchmark.cc | 4 | ||||
-rw-r--r-- | tests/test_disconnect.cc | 8 | ||||
-rw-r--r-- | tests/test_size.cc | 2 |
6 files changed, 21 insertions, 14 deletions
diff --git a/examples/member_method.cc b/examples/member_method.cc index add00a1..ab82525 100644 --- a/examples/member_method.cc +++ b/examples/member_method.cc @@ -23,12 +23,12 @@ protected: Something::Something() { - auto iter = signal_print.connect(sigc::mem_fun(*this, &Something::on_print)); + auto connection = signal_print.connect(sigc::mem_fun(*this, &Something::on_print)); signal_print.emit(2); // This isn't necessary - it's just to demonstrate how to disconnect: - iter->disconnect(); + connection.disconnect(); signal_print.emit(3); // Prove that it is no longer connected. } diff --git a/sigc++/connection.h b/sigc++/connection.h index 58cfd9e..cfcead2 100644 --- a/sigc++/connection.h +++ b/sigc++/connection.h @@ -19,11 +19,14 @@ #ifndef SIGC_CONNECTION_HPP #define SIGC_CONNECTION_HPP #include <sigc++config.h> -#include <sigc++/signal.h> +#include <sigc++/functors/slot_base.h> namespace sigc { +template <typename T_slot> +struct slot_iterator; + /** Convinience class for safe disconnection. * Iterators must not be used beyond the lifetime of the list * they work on. A connection object can be created from a diff --git a/sigc++/signal.h b/sigc++/signal.h index d7280c7..70748f8 100644 --- a/sigc++/signal.h +++ b/sigc++/signal.h @@ -21,6 +21,7 @@ #define SIGC_SIGNAL_H #include <list> +#include <sigc++/connection.h> #include <sigc++/signal_base.h> #include <sigc++/type_traits.h> #include <sigc++/trackable.h> @@ -469,7 +470,12 @@ class signal_with_accumulator : public signal_base { public: using slot_type = slot<T_return(T_arg...)>; - using connection = slot_iterator<slot_type>; + +private: + using iterator = slot_iterator<slot_type>; + +public: + /** Add a slot to the list of slots. * Any functor or slot may be passed into connect(). @@ -494,7 +500,7 @@ public: */ connection connect(const slot_type& slot_) { - return connection(signal_base::connect(slot_)); + return connection(iterator(signal_base::connect(slot_))); } /** Add a slot to the list of slots. @@ -504,7 +510,7 @@ public: */ connection connect(slot_type&& slot_) { - return connection(signal_base::connect(std::move(slot_))); + return connection(iterator(signal_base::connect(std::move(slot_)))); } /** Triggers the emission of the signal. diff --git a/tests/benchmark.cc b/tests/benchmark.cc index 7c42451..19aa9dd 100644 --- a/tests/benchmark.cc +++ b/tests/benchmark.cc @@ -82,7 +82,7 @@ void test_connect_disconnect() { foo foobar1; sigc::signal<int(int)> emitter; - sigc::signal<int(int)>::connection conn; + sigc::connection conn; std::cout << "elapsed time for " << COUNT << " connections/disconnections:" << std::endl; boost::timer::auto_cpu_timer timer; @@ -90,7 +90,7 @@ void test_connect_disconnect() for (int i=0; i < COUNT; ++i) { conn = emitter.connect(mem_fun(foobar1, &foo::bar)); - conn->disconnect(); + conn.disconnect(); } } diff --git a/tests/test_disconnect.cc b/tests/test_disconnect.cc index caadfaf..c50ffd7 100644 --- a/tests/test_disconnect.cc +++ b/tests/test_disconnect.cc @@ -81,8 +81,8 @@ main(int argc, char* argv[]) return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; sigc::signal<int(int)> sig; - sigc::signal<int(int)>::connection confoo; - sigc::signal<int(int)>::connection conbar; + sigc::connection confoo; + sigc::connection conbar; sigc::connection cona; // connection objects are safe to use beyond the life time of a signal. { @@ -107,12 +107,12 @@ main(int argc, char* argv[]) util->check_result( result_stream, "sig is connected to foo, A::foo, bar (size=3): foo(3) bar(3) A::foo(3) "); - conbar->disconnect(); // manual disconnection + conbar.disconnect(); // manual disconnection result_stream << "sig is connected to foo, A::foo (size=" << sig.size() << "): "; sig(4); util->check_result(result_stream, "sig is connected to foo, A::foo (size=2): foo(4) A::foo(4) "); - confoo->disconnect(); // manual disconnection + confoo.disconnect(); // manual disconnection result_stream << "sig is connected to A::foo (size=" << sig.size() << "): "; sig(5); util->check_result(result_stream, "sig is connected to A::foo (size=1): A::foo(5) "); diff --git a/tests/test_size.cc b/tests/test_size.cc index 414d6ec..8c84ccb 100644 --- a/tests/test_size.cc +++ b/tests/test_size.cc @@ -35,8 +35,6 @@ main(int argc, char* argv[]) std::cout << " trackable: " << sizeof(sigc::trackable) << std::endl; std::cout << " slot<void()>: " << sizeof(sigc::slot<void()>) << std::endl; std::cout << " signal<void()>: " << sizeof(sigc::signal<void()>) << std::endl; - std::cout << " signal<void()>::connection: " << sizeof(sigc::signal<void()>::connection) - << std::endl; std::cout << " connection: " << sizeof(sigc::connection) << std::endl; std::cout << std::endl << "sizes of internal classes:" << std::endl; |