// -*- c++ -*- /* Do not edit! -- generated file */ #ifndef _SIGC_FUNCTORS_MACROS_SLOTHM4_ #define _SIGC_FUNCTORS_MACROS_SLOTHM4_ #include #include #include #include namespace sigc { namespace internal { /** A typed slot_rep. * A typed slot_rep holds a functor that can be invoked from * slot::operator()(). visit_each() is used to visit the functor's * targets that inherit trackable recursively and register the * notification callback. Consequently the slot_rep object will be * notified when some referred object is destroyed or overwritten. */ template struct typed_slot_rep : public slot_rep { typedef typed_slot_rep self; /* Use an adaptor type so that arguments can be passed as const references * through explicit template instantiation from slot_call#::call_it() */ typedef typename adaptor_trait::adaptor_type adaptor_type; /** The functor contained by this slot_rep object. */ adaptor_type functor_; /** Constructs an invalid typed slot_rep object. * The notification callback is registered using visit_each(). * @param functor The functor contained by the new slot_rep object. */ inline typed_slot_rep(const T_functor& functor) : slot_rep(0, &destroy, &dup), functor_(functor) { visit_each_type(slot_do_bind(this), functor_); } inline typed_slot_rep(const typed_slot_rep& cl) : slot_rep(cl.call_, &destroy, &dup), functor_(cl.functor_) { visit_each_type(slot_do_bind(this), functor_); } inline ~typed_slot_rep() { call_ = 0; destroy_ = 0; visit_each_type(slot_do_unbind(this), functor_); } /** Detaches the stored functor from the other referred trackables and destroys it. * This does not destroy the base slot_rep object. */ static void* destroy(void* data) { self* self_ = static_cast(reinterpret_cast(data)); self_->call_ = 0; self_->destroy_ = 0; visit_each_type(slot_do_unbind(self_), self_->functor_); self_->functor_.~adaptor_type(); /* don't call disconnect() here: destroy() is either called * a) from the parent itself (in which case disconnect() leads to a segfault) or * b) from a parentless slot (in which case disconnect() does nothing) */ return 0; } /** Makes a deep copy of the slot_rep object. * Deep copy means that the notification callback of the new * slot_rep object is registered in the referred trackables. * @return A deep copy of the slot_rep object. */ static void* dup(void* data) { slot_rep* a_rep = reinterpret_cast(data); return static_cast(new self(*static_cast(a_rep))); } }; /** Abstracts functor execution. * call_it() invokes a functor of type @e T_functor with a list of * parameters whose types are given by the template arguments. * address() forms a function pointer from call_it(). * * The following template arguments are used: * - @e T_functor The functor type. * - @e T_return The return type of call_it(). * */ template struct slot_call0 { /** Invokes a functor of type @p T_functor. * @param rep slot_rep object that holds a functor of type @p T_functor. * @return The return values of the functor invocation. */ static T_return call_it(slot_rep* rep) { typedef typed_slot_rep typed_slot; typed_slot *typed_rep = static_cast(rep); return (typed_rep->functor_)(); } /** Forms a function pointer from call_it(). * @return A function pointer formed from call_it(). */ static hook address() { return reinterpret_cast(&call_it); } }; /** Abstracts functor execution. * call_it() invokes a functor of type @e T_functor with a list of * parameters whose types are given by the template arguments. * address() forms a function pointer from call_it(). * * The following template arguments are used: * - @e T_functor The functor type. * - @e T_return The return type of call_it(). * - @e T_arg1 Argument type used in the definition of call_it(). * */ template struct slot_call1 { /** Invokes a functor of type @p T_functor. * @param rep slot_rep object that holds a functor of type @p T_functor. * @param _A_a1 Argument to be passed on to the functor. * @return The return values of the functor invocation. */ static T_return call_it(slot_rep* rep, typename type_trait::take a_1) { typedef typed_slot_rep typed_slot; typed_slot *typed_rep = static_cast(rep); return (typed_rep->functor_).SIGC_WORKAROUND_OPERATOR_PARENTHESES::take> (a_1); } /** Forms a function pointer from call_it(). * @return A function pointer formed from call_it(). */ static hook address() { return reinterpret_cast(&call_it); } }; /** Abstracts functor execution. * call_it() invokes a functor of type @e T_functor with a list of * parameters whose types are given by the template arguments. * address() forms a function pointer from call_it(). * * The following template arguments are used: * - @e T_functor The functor type. * - @e T_return The return type of call_it(). * - @e T_arg1 Argument type used in the definition of call_it(). * - @e T_arg2 Argument type used in the definition of call_it(). * */ template struct slot_call2 { /** Invokes a functor of type @p T_functor. * @param rep slot_rep object that holds a functor of type @p T_functor. * @param _A_a1 Argument to be passed on to the functor. * @param _A_a2 Argument to be passed on to the functor. * @return The return values of the functor invocation. */ static T_return call_it(slot_rep* rep, typename type_trait::take a_1, typename type_trait::take a_2) { typedef typed_slot_rep typed_slot; typed_slot *typed_rep = static_cast(rep); return (typed_rep->functor_).SIGC_WORKAROUND_OPERATOR_PARENTHESES::take, typename type_trait::take> (a_1, a_2); } /** Forms a function pointer from call_it(). * @return A function pointer formed from call_it(). */ static hook address() { return reinterpret_cast(&call_it); } }; /** Abstracts functor execution. * call_it() invokes a functor of type @e T_functor with a list of * parameters whose types are given by the template arguments. * address() forms a function pointer from call_it(). * * The following template arguments are used: * - @e T_functor The functor type. * - @e T_return The return type of call_it(). * - @e T_arg1 Argument type used in the definition of call_it(). * - @e T_arg2 Argument type used in the definition of call_it(). * - @e T_arg3 Argument type used in the definition of call_it(). * */ template struct slot_call3 { /** Invokes a functor of type @p T_functor. * @param rep slot_rep object that holds a functor of type @p T_functor. * @param _A_a1 Argument to be passed on to the functor. * @param _A_a2 Argument to be passed on to the functor. * @param _A_a3 Argument to be passed on to the functor. * @return The return values of the functor invocation. */ static T_return call_it(slot_rep* rep, typename type_trait::take a_1, typename type_trait::take a_2, typename type_trait::take a_3) { typedef typed_slot_rep typed_slot; typed_slot *typed_rep = static_cast(rep); return (typed_rep->functor_).SIGC_WORKAROUND_OPERATOR_PARENTHESES::take, typename type_trait::take, typename type_trait::take> (a_1, a_2, a_3); } /** Forms a function pointer from call_it(). * @return A function pointer formed from call_it(). */ static hook address() { return reinterpret_cast(&call_it); } }; /** Abstracts functor execution. * call_it() invokes a functor of type @e T_functor with a list of * parameters whose types are given by the template arguments. * address() forms a function pointer from call_it(). * * The following template arguments are used: * - @e T_functor The functor type. * - @e T_return The return type of call_it(). * - @e T_arg1 Argument type used in the definition of call_it(). * - @e T_arg2 Argument type used in the definition of call_it(). * - @e T_arg3 Argument type used in the definition of call_it(). * - @e T_arg4 Argument type used in the definition of call_it(). * */ template struct slot_call4 { /** Invokes a functor of type @p T_functor. * @param rep slot_rep object that holds a functor of type @p T_functor. * @param _A_a1 Argument to be passed on to the functor. * @param _A_a2 Argument to be passed on to the functor. * @param _A_a3 Argument to be passed on to the functor. * @param _A_a4 Argument to be passed on to the functor. * @return The return values of the functor invocation. */ static T_return call_it(slot_rep* rep, typename type_trait::take a_1, typename type_trait::take a_2, typename type_trait::take a_3, typename type_trait::take a_4) { typedef typed_slot_rep typed_slot; typed_slot *typed_rep = static_cast(rep); return (typed_rep->functor_).SIGC_WORKAROUND_OPERATOR_PARENTHESES::take, typename type_trait::take, typename type_trait::take, typename type_trait::take> (a_1, a_2, a_3, a_4); } /** Forms a function pointer from call_it(). * @return A function pointer formed from call_it(). */ static hook address() { return reinterpret_cast(&call_it); } }; /** Abstracts functor execution. * call_it() invokes a functor of type @e T_functor with a list of * parameters whose types are given by the template arguments. * address() forms a function pointer from call_it(). * * The following template arguments are used: * - @e T_functor The functor type. * - @e T_return The return type of call_it(). * - @e T_arg1 Argument type used in the definition of call_it(). * - @e T_arg2 Argument type used in the definition of call_it(). * - @e T_arg3 Argument type used in the definition of call_it(). * - @e T_arg4 Argument type used in the definition of call_it(). * - @e T_arg5 Argument type used in the definition of call_it(). * */ template struct slot_call5 { /** Invokes a functor of type @p T_functor. * @param rep slot_rep object that holds a functor of type @p T_functor. * @param _A_a1 Argument to be passed on to the functor. * @param _A_a2 Argument to be passed on to the functor. * @param _A_a3 Argument to be passed on to the functor. * @param _A_a4 Argument to be passed on to the functor. * @param _A_a5 Argument to be passed on to the functor. * @return The return values of the functor invocation. */ static T_return call_it(slot_rep* rep, typename type_trait::take a_1, typename type_trait::take a_2, typename type_trait::take a_3, typename type_trait::take a_4, typename type_trait::take a_5) { typedef typed_slot_rep typed_slot; typed_slot *typed_rep = static_cast(rep); return (typed_rep->functor_).SIGC_WORKAROUND_OPERATOR_PARENTHESES::take, typename type_trait::take, typename type_trait::take, typename type_trait::take, typename type_trait::take> (a_1, a_2, a_3, a_4, a_5); } /** Forms a function pointer from call_it(). * @return A function pointer formed from call_it(). */ static hook address() { return reinterpret_cast(&call_it); } }; /** Abstracts functor execution. * call_it() invokes a functor of type @e T_functor with a list of * parameters whose types are given by the template arguments. * address() forms a function pointer from call_it(). * * The following template arguments are used: * - @e T_functor The functor type. * - @e T_return The return type of call_it(). * - @e T_arg1 Argument type used in the definition of call_it(). * - @e T_arg2 Argument type used in the definition of call_it(). * - @e T_arg3 Argument type used in the definition of call_it(). * - @e T_arg4 Argument type used in the definition of call_it(). * - @e T_arg5 Argument type used in the definition of call_it(). * - @e T_arg6 Argument type used in the definition of call_it(). * */ template struct slot_call6 { /** Invokes a functor of type @p T_functor. * @param rep slot_rep object that holds a functor of type @p T_functor. * @param _A_a1 Argument to be passed on to the functor. * @param _A_a2 Argument to be passed on to the functor. * @param _A_a3 Argument to be passed on to the functor. * @param _A_a4 Argument to be passed on to the functor. * @param _A_a5 Argument to be passed on to the functor. * @param _A_a6 Argument to be passed on to the functor. * @return The return values of the functor invocation. */ static T_return call_it(slot_rep* rep, typename type_trait::take a_1, typename type_trait::take a_2, typename type_trait::take a_3, typename type_trait::take a_4, typename type_trait::take a_5, typename type_trait::take a_6) { typedef typed_slot_rep typed_slot; typed_slot *typed_rep = static_cast(rep); return (typed_rep->functor_).SIGC_WORKAROUND_OPERATOR_PARENTHESES::take, typename type_trait::take, typename type_trait::take, typename type_trait::take, typename type_trait::take, typename type_trait::take> (a_1, a_2, a_3, a_4, a_5, a_6); } /** Forms a function pointer from call_it(). * @return A function pointer formed from call_it(). */ static hook address() { return reinterpret_cast(&call_it); } }; /** Abstracts functor execution. * call_it() invokes a functor of type @e T_functor with a list of * parameters whose types are given by the template arguments. * address() forms a function pointer from call_it(). * * The following template arguments are used: * - @e T_functor The functor type. * - @e T_return The return type of call_it(). * - @e T_arg1 Argument type used in the definition of call_it(). * - @e T_arg2 Argument type used in the definition of call_it(). * - @e T_arg3 Argument type used in the definition of call_it(). * - @e T_arg4 Argument type used in the definition of call_it(). * - @e T_arg5 Argument type used in the definition of call_it(). * - @e T_arg6 Argument type used in the definition of call_it(). * - @e T_arg7 Argument type used in the definition of call_it(). * */ template struct slot_call7 { /** Invokes a functor of type @p T_functor. * @param rep slot_rep object that holds a functor of type @p T_functor. * @param _A_a1 Argument to be passed on to the functor. * @param _A_a2 Argument to be passed on to the functor. * @param _A_a3 Argument to be passed on to the functor. * @param _A_a4 Argument to be passed on to the functor. * @param _A_a5 Argument to be passed on to the functor. * @param _A_a6 Argument to be passed on to the functor. * @param _A_a7 Argument to be passed on to the functor. * @return The return values of the functor invocation. */ static T_return call_it(slot_rep* rep, typename type_trait::take a_1, typename type_trait::take a_2, typename type_trait::take a_3, typename type_trait::take a_4, typename type_trait::take a_5, typename type_trait::take a_6, typename type_trait::take a_7) { typedef typed_slot_rep typed_slot; typed_slot *typed_rep = static_cast(rep); return (typed_rep->functor_).SIGC_WORKAROUND_OPERATOR_PARENTHESES::take, typename type_trait::take, typename type_trait::take, typename type_trait::take, typename type_trait::take, typename type_trait::take, typename type_trait::take> (a_1, a_2, a_3, a_4, a_5, a_6, a_7); } /** Forms a function pointer from call_it(). * @return A function pointer formed from call_it(). */ static hook address() { return reinterpret_cast(&call_it); } }; } /* namespace internal */ /** Converts an arbitrary functor to a unified type which is opaque. * sigc::slot itself is a functor or to be more precise a closure. It contains * a single, arbitrary functor (or closure) that is executed in operator()(). * * The template arguments determine the function signature of operator()(): * - @e T_return The return type of operator()(). * * To use simply assign the slot to the desired functor. If the functor * is not compatible with the parameter list defined with the template * arguments compiler errors are triggered. When called the slot * will invoke the functor with minimal copies. * block() and unblock() can be used to block the functor's invocation * from operator()() temporarily. * * You should use the more convenient unnumbered sigc::slot template. * * @ingroup slot */ /* TODO: Where put the following bit of information? I can't make any * sense of the "because", by the way! * * Because slot is opaque, visit_each() will not visit its internal members. */ template class slot0 : public slot_base { public: typedef T_return result_type; #ifndef DOXYGEN_SHOULD_SKIP_THIS private: typedef internal::slot_rep rep_type; public: typedef T_return (*call_type)(rep_type*); #endif /** Invoke the contained functor unless slot is in blocking state. * @return The return value of the functor invocation. */ inline T_return operator()() const { if (!empty() && !blocked()) return (reinterpret_cast(slot_base::rep_->call_))(slot_base::rep_); return T_return(); } inline slot0() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot0(const T_functor& _A_func) : slot_base(new internal::typed_slot_rep(_A_func)) { //The slot_base:: is necessary to stop the HP-UX aCC compiler from being confused. murrayc. slot_base::rep_->call_ = internal::slot_call0::address(); } slot0(const slot0& src) : slot_base(src) {} /** Overrides this slot making a copy from another slot. * @param src The slot from which to make a copy. * @return @p this. */ slot0& operator=(const slot0& src) { slot_base::operator=(src); return *this; } }; /** Converts an arbitrary functor to a unified type which is opaque. * sigc::slot itself is a functor or to be more precise a closure. It contains * a single, arbitrary functor (or closure) that is executed in operator()(). * * The template arguments determine the function signature of operator()(): * - @e T_return The return type of operator()(). * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. * * To use simply assign the slot to the desired functor. If the functor * is not compatible with the parameter list defined with the template * arguments compiler errors are triggered. When called the slot * will invoke the functor with minimal copies. * block() and unblock() can be used to block the functor's invocation * from operator()() temporarily. * * You should use the more convenient unnumbered sigc::slot template. * * @ingroup slot */ /* TODO: Where put the following bit of information? I can't make any * sense of the "because", by the way! * * Because slot is opaque, visit_each() will not visit its internal members. */ template class slot1 : public slot_base { public: typedef T_return result_type; typedef typename type_trait::take arg1_type_; #ifndef DOXYGEN_SHOULD_SKIP_THIS private: typedef internal::slot_rep rep_type; public: typedef T_return (*call_type)(rep_type*, arg1_type_); #endif /** Invoke the contained functor unless slot is in blocking state. * @param _A_a1 Argument to be passed on to the functor. * @return The return value of the functor invocation. */ inline T_return operator()(arg1_type_ _A_a1) const { if (!empty() && !blocked()) return (reinterpret_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a1); return T_return(); } inline slot1() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot1(const T_functor& _A_func) : slot_base(new internal::typed_slot_rep(_A_func)) { //The slot_base:: is necessary to stop the HP-UX aCC compiler from being confused. murrayc. slot_base::rep_->call_ = internal::slot_call1::address(); } slot1(const slot1& src) : slot_base(src) {} /** Overrides this slot making a copy from another slot. * @param src The slot from which to make a copy. * @return @p this. */ slot1& operator=(const slot1& src) { slot_base::operator=(src); return *this; } }; /** Converts an arbitrary functor to a unified type which is opaque. * sigc::slot itself is a functor or to be more precise a closure. It contains * a single, arbitrary functor (or closure) that is executed in operator()(). * * The template arguments determine the function signature of operator()(): * - @e T_return The return type of operator()(). * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg2 Argument type used in the definition of operator()(). The default @p nil means no argument. * * To use simply assign the slot to the desired functor. If the functor * is not compatible with the parameter list defined with the template * arguments compiler errors are triggered. When called the slot * will invoke the functor with minimal copies. * block() and unblock() can be used to block the functor's invocation * from operator()() temporarily. * * You should use the more convenient unnumbered sigc::slot template. * * @ingroup slot */ /* TODO: Where put the following bit of information? I can't make any * sense of the "because", by the way! * * Because slot is opaque, visit_each() will not visit its internal members. */ template class slot2 : public slot_base { public: typedef T_return result_type; typedef typename type_trait::take arg1_type_; typedef typename type_trait::take arg2_type_; #ifndef DOXYGEN_SHOULD_SKIP_THIS private: typedef internal::slot_rep rep_type; public: typedef T_return (*call_type)(rep_type*, arg1_type_, arg2_type_); #endif /** Invoke the contained functor unless slot is in blocking state. * @param _A_a1 Argument to be passed on to the functor. * @param _A_a2 Argument to be passed on to the functor. * @return The return value of the functor invocation. */ inline T_return operator()(arg1_type_ _A_a1, arg2_type_ _A_a2) const { if (!empty() && !blocked()) return (reinterpret_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a1, _A_a2); return T_return(); } inline slot2() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot2(const T_functor& _A_func) : slot_base(new internal::typed_slot_rep(_A_func)) { //The slot_base:: is necessary to stop the HP-UX aCC compiler from being confused. murrayc. slot_base::rep_->call_ = internal::slot_call2::address(); } slot2(const slot2& src) : slot_base(src) {} /** Overrides this slot making a copy from another slot. * @param src The slot from which to make a copy. * @return @p this. */ slot2& operator=(const slot2& src) { slot_base::operator=(src); return *this; } }; /** Converts an arbitrary functor to a unified type which is opaque. * sigc::slot itself is a functor or to be more precise a closure. It contains * a single, arbitrary functor (or closure) that is executed in operator()(). * * The template arguments determine the function signature of operator()(): * - @e T_return The return type of operator()(). * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg2 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg3 Argument type used in the definition of operator()(). The default @p nil means no argument. * * To use simply assign the slot to the desired functor. If the functor * is not compatible with the parameter list defined with the template * arguments compiler errors are triggered. When called the slot * will invoke the functor with minimal copies. * block() and unblock() can be used to block the functor's invocation * from operator()() temporarily. * * You should use the more convenient unnumbered sigc::slot template. * * @ingroup slot */ /* TODO: Where put the following bit of information? I can't make any * sense of the "because", by the way! * * Because slot is opaque, visit_each() will not visit its internal members. */ template class slot3 : public slot_base { public: typedef T_return result_type; typedef typename type_trait::take arg1_type_; typedef typename type_trait::take arg2_type_; typedef typename type_trait::take arg3_type_; #ifndef DOXYGEN_SHOULD_SKIP_THIS private: typedef internal::slot_rep rep_type; public: typedef T_return (*call_type)(rep_type*, arg1_type_, arg2_type_, arg3_type_); #endif /** Invoke the contained functor unless slot is in blocking state. * @param _A_a1 Argument to be passed on to the functor. * @param _A_a2 Argument to be passed on to the functor. * @param _A_a3 Argument to be passed on to the functor. * @return The return value of the functor invocation. */ inline T_return operator()(arg1_type_ _A_a1, arg2_type_ _A_a2, arg3_type_ _A_a3) const { if (!empty() && !blocked()) return (reinterpret_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a1, _A_a2, _A_a3); return T_return(); } inline slot3() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot3(const T_functor& _A_func) : slot_base(new internal::typed_slot_rep(_A_func)) { //The slot_base:: is necessary to stop the HP-UX aCC compiler from being confused. murrayc. slot_base::rep_->call_ = internal::slot_call3::address(); } slot3(const slot3& src) : slot_base(src) {} /** Overrides this slot making a copy from another slot. * @param src The slot from which to make a copy. * @return @p this. */ slot3& operator=(const slot3& src) { slot_base::operator=(src); return *this; } }; /** Converts an arbitrary functor to a unified type which is opaque. * sigc::slot itself is a functor or to be more precise a closure. It contains * a single, arbitrary functor (or closure) that is executed in operator()(). * * The template arguments determine the function signature of operator()(): * - @e T_return The return type of operator()(). * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg2 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg3 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg4 Argument type used in the definition of operator()(). The default @p nil means no argument. * * To use simply assign the slot to the desired functor. If the functor * is not compatible with the parameter list defined with the template * arguments compiler errors are triggered. When called the slot * will invoke the functor with minimal copies. * block() and unblock() can be used to block the functor's invocation * from operator()() temporarily. * * You should use the more convenient unnumbered sigc::slot template. * * @ingroup slot */ /* TODO: Where put the following bit of information? I can't make any * sense of the "because", by the way! * * Because slot is opaque, visit_each() will not visit its internal members. */ template class slot4 : public slot_base { public: typedef T_return result_type; typedef typename type_trait::take arg1_type_; typedef typename type_trait::take arg2_type_; typedef typename type_trait::take arg3_type_; typedef typename type_trait::take arg4_type_; #ifndef DOXYGEN_SHOULD_SKIP_THIS private: typedef internal::slot_rep rep_type; public: typedef T_return (*call_type)(rep_type*, arg1_type_, arg2_type_, arg3_type_, arg4_type_); #endif /** Invoke the contained functor unless slot is in blocking state. * @param _A_a1 Argument to be passed on to the functor. * @param _A_a2 Argument to be passed on to the functor. * @param _A_a3 Argument to be passed on to the functor. * @param _A_a4 Argument to be passed on to the functor. * @return The return value of the functor invocation. */ inline T_return operator()(arg1_type_ _A_a1, arg2_type_ _A_a2, arg3_type_ _A_a3, arg4_type_ _A_a4) const { if (!empty() && !blocked()) return (reinterpret_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a1, _A_a2, _A_a3, _A_a4); return T_return(); } inline slot4() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot4(const T_functor& _A_func) : slot_base(new internal::typed_slot_rep(_A_func)) { //The slot_base:: is necessary to stop the HP-UX aCC compiler from being confused. murrayc. slot_base::rep_->call_ = internal::slot_call4::address(); } slot4(const slot4& src) : slot_base(src) {} /** Overrides this slot making a copy from another slot. * @param src The slot from which to make a copy. * @return @p this. */ slot4& operator=(const slot4& src) { slot_base::operator=(src); return *this; } }; /** Converts an arbitrary functor to a unified type which is opaque. * sigc::slot itself is a functor or to be more precise a closure. It contains * a single, arbitrary functor (or closure) that is executed in operator()(). * * The template arguments determine the function signature of operator()(): * - @e T_return The return type of operator()(). * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg2 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg3 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg4 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg5 Argument type used in the definition of operator()(). The default @p nil means no argument. * * To use simply assign the slot to the desired functor. If the functor * is not compatible with the parameter list defined with the template * arguments compiler errors are triggered. When called the slot * will invoke the functor with minimal copies. * block() and unblock() can be used to block the functor's invocation * from operator()() temporarily. * * You should use the more convenient unnumbered sigc::slot template. * * @ingroup slot */ /* TODO: Where put the following bit of information? I can't make any * sense of the "because", by the way! * * Because slot is opaque, visit_each() will not visit its internal members. */ template class slot5 : public slot_base { public: typedef T_return result_type; typedef typename type_trait::take arg1_type_; typedef typename type_trait::take arg2_type_; typedef typename type_trait::take arg3_type_; typedef typename type_trait::take arg4_type_; typedef typename type_trait::take arg5_type_; #ifndef DOXYGEN_SHOULD_SKIP_THIS private: typedef internal::slot_rep rep_type; public: typedef T_return (*call_type)(rep_type*, arg1_type_, arg2_type_, arg3_type_, arg4_type_, arg5_type_); #endif /** Invoke the contained functor unless slot is in blocking state. * @param _A_a1 Argument to be passed on to the functor. * @param _A_a2 Argument to be passed on to the functor. * @param _A_a3 Argument to be passed on to the functor. * @param _A_a4 Argument to be passed on to the functor. * @param _A_a5 Argument to be passed on to the functor. * @return The return value of the functor invocation. */ inline T_return operator()(arg1_type_ _A_a1, arg2_type_ _A_a2, arg3_type_ _A_a3, arg4_type_ _A_a4, arg5_type_ _A_a5) const { if (!empty() && !blocked()) return (reinterpret_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a1, _A_a2, _A_a3, _A_a4, _A_a5); return T_return(); } inline slot5() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot5(const T_functor& _A_func) : slot_base(new internal::typed_slot_rep(_A_func)) { //The slot_base:: is necessary to stop the HP-UX aCC compiler from being confused. murrayc. slot_base::rep_->call_ = internal::slot_call5::address(); } slot5(const slot5& src) : slot_base(src) {} /** Overrides this slot making a copy from another slot. * @param src The slot from which to make a copy. * @return @p this. */ slot5& operator=(const slot5& src) { slot_base::operator=(src); return *this; } }; /** Converts an arbitrary functor to a unified type which is opaque. * sigc::slot itself is a functor or to be more precise a closure. It contains * a single, arbitrary functor (or closure) that is executed in operator()(). * * The template arguments determine the function signature of operator()(): * - @e T_return The return type of operator()(). * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg2 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg3 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg4 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg5 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg6 Argument type used in the definition of operator()(). The default @p nil means no argument. * * To use simply assign the slot to the desired functor. If the functor * is not compatible with the parameter list defined with the template * arguments compiler errors are triggered. When called the slot * will invoke the functor with minimal copies. * block() and unblock() can be used to block the functor's invocation * from operator()() temporarily. * * You should use the more convenient unnumbered sigc::slot template. * * @ingroup slot */ /* TODO: Where put the following bit of information? I can't make any * sense of the "because", by the way! * * Because slot is opaque, visit_each() will not visit its internal members. */ template class slot6 : public slot_base { public: typedef T_return result_type; typedef typename type_trait::take arg1_type_; typedef typename type_trait::take arg2_type_; typedef typename type_trait::take arg3_type_; typedef typename type_trait::take arg4_type_; typedef typename type_trait::take arg5_type_; typedef typename type_trait::take arg6_type_; #ifndef DOXYGEN_SHOULD_SKIP_THIS private: typedef internal::slot_rep rep_type; public: typedef T_return (*call_type)(rep_type*, arg1_type_, arg2_type_, arg3_type_, arg4_type_, arg5_type_, arg6_type_); #endif /** Invoke the contained functor unless slot is in blocking state. * @param _A_a1 Argument to be passed on to the functor. * @param _A_a2 Argument to be passed on to the functor. * @param _A_a3 Argument to be passed on to the functor. * @param _A_a4 Argument to be passed on to the functor. * @param _A_a5 Argument to be passed on to the functor. * @param _A_a6 Argument to be passed on to the functor. * @return The return value of the functor invocation. */ inline T_return operator()(arg1_type_ _A_a1, arg2_type_ _A_a2, arg3_type_ _A_a3, arg4_type_ _A_a4, arg5_type_ _A_a5, arg6_type_ _A_a6) const { if (!empty() && !blocked()) return (reinterpret_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a1, _A_a2, _A_a3, _A_a4, _A_a5, _A_a6); return T_return(); } inline slot6() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot6(const T_functor& _A_func) : slot_base(new internal::typed_slot_rep(_A_func)) { //The slot_base:: is necessary to stop the HP-UX aCC compiler from being confused. murrayc. slot_base::rep_->call_ = internal::slot_call6::address(); } slot6(const slot6& src) : slot_base(src) {} /** Overrides this slot making a copy from another slot. * @param src The slot from which to make a copy. * @return @p this. */ slot6& operator=(const slot6& src) { slot_base::operator=(src); return *this; } }; /** Converts an arbitrary functor to a unified type which is opaque. * sigc::slot itself is a functor or to be more precise a closure. It contains * a single, arbitrary functor (or closure) that is executed in operator()(). * * The template arguments determine the function signature of operator()(): * - @e T_return The return type of operator()(). * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg2 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg3 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg4 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg5 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg6 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg7 Argument type used in the definition of operator()(). The default @p nil means no argument. * * To use simply assign the slot to the desired functor. If the functor * is not compatible with the parameter list defined with the template * arguments compiler errors are triggered. When called the slot * will invoke the functor with minimal copies. * block() and unblock() can be used to block the functor's invocation * from operator()() temporarily. * * You should use the more convenient unnumbered sigc::slot template. * * @ingroup slot */ /* TODO: Where put the following bit of information? I can't make any * sense of the "because", by the way! * * Because slot is opaque, visit_each() will not visit its internal members. */ template class slot7 : public slot_base { public: typedef T_return result_type; typedef typename type_trait::take arg1_type_; typedef typename type_trait::take arg2_type_; typedef typename type_trait::take arg3_type_; typedef typename type_trait::take arg4_type_; typedef typename type_trait::take arg5_type_; typedef typename type_trait::take arg6_type_; typedef typename type_trait::take arg7_type_; #ifndef DOXYGEN_SHOULD_SKIP_THIS private: typedef internal::slot_rep rep_type; public: typedef T_return (*call_type)(rep_type*, arg1_type_, arg2_type_, arg3_type_, arg4_type_, arg5_type_, arg6_type_, arg7_type_); #endif /** Invoke the contained functor unless slot is in blocking state. * @param _A_a1 Argument to be passed on to the functor. * @param _A_a2 Argument to be passed on to the functor. * @param _A_a3 Argument to be passed on to the functor. * @param _A_a4 Argument to be passed on to the functor. * @param _A_a5 Argument to be passed on to the functor. * @param _A_a6 Argument to be passed on to the functor. * @param _A_a7 Argument to be passed on to the functor. * @return The return value of the functor invocation. */ inline T_return operator()(arg1_type_ _A_a1, arg2_type_ _A_a2, arg3_type_ _A_a3, arg4_type_ _A_a4, arg5_type_ _A_a5, arg6_type_ _A_a6, arg7_type_ _A_a7) const { if (!empty() && !blocked()) return (reinterpret_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a1, _A_a2, _A_a3, _A_a4, _A_a5, _A_a6, _A_a7); return T_return(); } inline slot7() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot7(const T_functor& _A_func) : slot_base(new internal::typed_slot_rep(_A_func)) { //The slot_base:: is necessary to stop the HP-UX aCC compiler from being confused. murrayc. slot_base::rep_->call_ = internal::slot_call7::address(); } slot7(const slot7& src) : slot_base(src) {} /** Overrides this slot making a copy from another slot. * @param src The slot from which to make a copy. * @return @p this. */ slot7& operator=(const slot7& src) { slot_base::operator=(src); return *this; } }; /** Convenience wrapper for the numbered sigc::slot# templates. * Slots convert arbitrary functors to unified types which are opaque. * sigc::slot itself is a functor or to be more precise a closure. It contains * a single, arbitrary functor (or closure) that is executed in operator()(). * * The template arguments determine the function signature of operator()(): * - @e T_return The return type of operator()(). * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg2 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg3 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg4 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg5 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg6 Argument type used in the definition of operator()(). The default @p nil means no argument. * - @e T_arg7 Argument type used in the definition of operator()(). The default @p nil means no argument. * * To use simply assign the slot to the desired functor. If the functor * is not compatible with the parameter list defined with the template * arguments compiler errors are triggered. When called the slot * will invoke the functor with minimal copies. * block() and unblock() can be used to block the functor's invocation * from operator()() temporarily. * * @par Example: * @code * void foo(int) {} * sigc::slot s = sigc::ptr_fun(&foo); * s(19); * @endcode * * @ingroup slot */ template class slot : public slot7 { public: typedef slot7 parent_type; inline slot() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot(const T_functor& _A_func) : parent_type(_A_func) {} slot(const slot& src) : parent_type(reinterpret_cast(src)) {} }; /** Convenience wrapper for the numbered sigc::slot0 template. * See the base class for useful methods. * This is the template specialization of the unnumbered sigc::slot * template for 0 argument(s), specialized for different numbers of arguments * This is possible because the template has default (nil) template types. */ template class slot : public slot0 { public: typedef slot0 parent_type; inline slot() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot(const T_functor& _A_func) : parent_type(_A_func) {} slot(const slot& src) : parent_type(reinterpret_cast(src)) {} }; /** Convenience wrapper for the numbered sigc::slot1 template. * See the base class for useful methods. * This is the template specialization of the unnumbered sigc::slot * template for 1 argument(s), specialized for different numbers of arguments * This is possible because the template has default (nil) template types. */ template class slot : public slot1 { public: typedef slot1 parent_type; inline slot() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot(const T_functor& _A_func) : parent_type(_A_func) {} slot(const slot& src) : parent_type(reinterpret_cast(src)) {} }; /** Convenience wrapper for the numbered sigc::slot2 template. * See the base class for useful methods. * This is the template specialization of the unnumbered sigc::slot * template for 2 argument(s), specialized for different numbers of arguments * This is possible because the template has default (nil) template types. */ template class slot : public slot2 { public: typedef slot2 parent_type; inline slot() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot(const T_functor& _A_func) : parent_type(_A_func) {} slot(const slot& src) : parent_type(reinterpret_cast(src)) {} }; /** Convenience wrapper for the numbered sigc::slot3 template. * See the base class for useful methods. * This is the template specialization of the unnumbered sigc::slot * template for 3 argument(s), specialized for different numbers of arguments * This is possible because the template has default (nil) template types. */ template class slot : public slot3 { public: typedef slot3 parent_type; inline slot() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot(const T_functor& _A_func) : parent_type(_A_func) {} slot(const slot& src) : parent_type(reinterpret_cast(src)) {} }; /** Convenience wrapper for the numbered sigc::slot4 template. * See the base class for useful methods. * This is the template specialization of the unnumbered sigc::slot * template for 4 argument(s), specialized for different numbers of arguments * This is possible because the template has default (nil) template types. */ template class slot : public slot4 { public: typedef slot4 parent_type; inline slot() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot(const T_functor& _A_func) : parent_type(_A_func) {} slot(const slot& src) : parent_type(reinterpret_cast(src)) {} }; /** Convenience wrapper for the numbered sigc::slot5 template. * See the base class for useful methods. * This is the template specialization of the unnumbered sigc::slot * template for 5 argument(s), specialized for different numbers of arguments * This is possible because the template has default (nil) template types. */ template class slot : public slot5 { public: typedef slot5 parent_type; inline slot() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot(const T_functor& _A_func) : parent_type(_A_func) {} slot(const slot& src) : parent_type(reinterpret_cast(src)) {} }; /** Convenience wrapper for the numbered sigc::slot6 template. * See the base class for useful methods. * This is the template specialization of the unnumbered sigc::slot * template for 6 argument(s), specialized for different numbers of arguments * This is possible because the template has default (nil) template types. */ template class slot : public slot6 { public: typedef slot6 parent_type; inline slot() {} /** Constructs a slot from an arbitrary functor. * @param _A_func The desirer functor the new slot should be assigned to. */ template slot(const T_functor& _A_func) : parent_type(_A_func) {} slot(const slot& src) : parent_type(reinterpret_cast(src)) {} }; } /* namespace sigc */ #endif /* _SIGC_FUNCTORS_MACROS_SLOTHM4_ */