From fa590d385bdd7ca2336e9c6e65bc0ca2ece758be Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 26 Sep 2011 22:22:14 +0000 Subject: [PATCH] Add Signal5. git-svn-id: svn://localhost/ardour2/branches/3.0@10134 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/pbd/pbd/signals.h | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) 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 +class Signal5 { +public: + Signal5 () {} + typedef boost::signals2::signal 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 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__ */