diff options
author | Carl Hetherington <carl@carlh.net> | 2011-09-26 22:22:14 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2011-09-26 22:22:14 +0000 |
commit | fa590d385bdd7ca2336e9c6e65bc0ca2ece758be (patch) | |
tree | 655ef7dc1f2d25e5c17d68262b17691a62293f93 /libs/pbd/pbd | |
parent | 1f1abd06466ee8391272c71fd6e185482dec1765 (diff) |
Add Signal5.
git-svn-id: svn://localhost/ardour2/branches/3.0@10134 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/pbd/pbd')
-rw-r--r-- | libs/pbd/pbd/signals.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/libs/pbd/pbd/signals.h b/libs/pbd/pbd/signals.h index 668490f97f..1acc6022b0 100644 --- a/libs/pbd/pbd/signals.h +++ b/libs/pbd/pbd/signals.h @@ -323,6 +323,58 @@ private: SignalType _signal; }; +template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5> +class Signal5 { +public: + Signal5 () {} + typedef boost::signals2::signal<R(A1,A2,A3,A4,A5)> SignalType; + + void connect_same_thread (ScopedConnectionList& clist, + const typename SignalType::slot_function_type& slot) { + clist.add_connection (_signal.connect (slot)); + } + + void connect_same_thread (ScopedConnection& c, + const typename SignalType::slot_function_type& slot) { + c = _signal.connect (slot); + } + + static void compositor (typename boost::function<void(A1,A2,A3,A4,A5)> f, PBD::EventLoop* event_loop, + EventLoop::InvalidationRecord* ir, + A1 arg1, A2 arg2, A3 arg3, A4 arg4, A5 arg5) { + event_loop->call_slot (ir, boost::bind (f, arg1, arg2, arg3, arg4, arg5)); + } + + void connect (ScopedConnectionList& clist, + PBD::EventLoop::InvalidationRecord* ir, + const typename SignalType::slot_function_type& slot, + PBD::EventLoop* event_loop) { + if (ir) { + ir->event_loop = event_loop; + } + clist.add_connection (_signal.connect (boost::bind (&compositor, slot, event_loop, ir, _1, _2, _3, _4, _5))); + } + + void connect (ScopedConnection& c, + PBD::EventLoop::InvalidationRecord* ir, + const typename SignalType::slot_function_type& slot, + PBD::EventLoop* event_loop) { + if (ir) { + ir->event_loop = event_loop; + } + c = _signal.connect (_signal.connect (boost::bind (&compositor, slot, event_loop, ir, _1, _2, _3, _4, _5))); + } + + typename SignalType::result_type operator()(A1 arg1, A2 arg2, A3 arg3, A4 arg4, A5 arg5) { + return _signal (arg1, arg2, arg3, arg4, arg5); + } + + bool empty() const { return _signal.empty(); } + +private: + SignalType _signal; +}; + } /* namespace */ #endif /* __pbd_signals_h__ */ |