// -*- c++ -*- /* This is a generated file, do not edit. Generated from ../sigc++/macros/slot.h.m4 */ #ifndef SIGCXX_SLOT_H #define SIGCXX_SLOT_H /* This file just gives the basic definition of Slots. Callback# is the 4 byte data necessary for representing all callback types. CallData is a specific interpretation of the Callback data. Slot_ is a pimple on SlotData containing an Object for holding its referencees, a Dependency that removes the slot when its caller or receiver die, and a Callback. Slot is a handle to a Slot_. */ #include #include #include #include #ifdef SIGC_CXX_NAMESPACES namespace SigC { #endif // Base node for a polymorphic list of "extra" data needed // by various slots. struct LIBSIGC_API SlotNode { void *next_; SlotNode(); virtual ~SlotNode()=0; }; struct LIBSIGC_API SlotIterator_ { typedef SlotNode NodeType; typedef SlotIterator_ Iterator; NodeType *node_; NodeType* node() {return node_;} const NodeType* node() const {return node_;} NodeType& operator*() {return *node_; } const NodeType& operator*() const {return *node_; } bool operator==(const Iterator& i) const {return node_==i.node_; } bool operator!=(const Iterator& i) const {return node_!=i.node_; } Iterator& operator++() { if (node_) node_=(NodeType*)node_->next_; return *this; } Iterator operator++(int) {Iterator tmp=*this; ++*this; return tmp; } Iterator& operator= (const Iterator& i) { node_=i.node_; return *this; } SlotIterator_():node_(0) {} SlotIterator_(NodeType *node):node_(node) {} }; // This is a list for storing internal data for slots struct LIBSIGC_API SlotList_ { typedef SlotNode NodeType; typedef SlotIterator_ Iterator; NodeType* head_; Iterator begin() {return ((NodeType*)head_);} Iterator end() {return Iterator();} const Iterator begin() const {return ((NodeType*)head_);} const Iterator end() const {return Iterator();} // this is best used at the begining of list. Iterator insert_direct(Iterator pos,NodeType *n); void clear(); bool empty() const {return head_==0;} SlotList_():head_(0) {} ~SlotList_() {clear();} private: SlotList_(const SlotList_&); }; struct SlotData; // SlotDependent is an internal of SlotData used to unreference the // Slot when either the sender or receiver have gone away struct LIBSIGC_API SlotDependent:public ScopeNode { struct LIBSIGC_API Dep: public ScopeNode { SlotData *parent; virtual void erase(); Dep() {} virtual ~Dep(); } dep; ScopeNode* receiver() {return &dep;} ScopeNode* sender() {return this;} SlotData* parent() {return dep.parent;} bool connected() {return (next_!=this);} virtual void erase(); void set_parent(SlotData *s) {dep.parent=s;} SlotDependent(SlotData &s) {dep.parent=&s;} SlotDependent() {} virtual ~SlotDependent(); }; // common data to all callbacks. struct Callback_ { // callback function void* (*func_)(void*); struct O; struct C1 { void* (*f1)(void*); }; struct C2 { O* o; void (O::*v)(void); }; // Object pointer or function pointer union {C1 a1; C2 a2;}; }; // All slots have the same base struct LIBSIGC_API SlotData:public ObjectScoped { typedef SlotList_ List; SlotDependent dep_; ScopeNode* receiver() {return dep_.receiver();} ScopeNode* sender() {return dep_.sender();} // Called from signals to tell slot object it is connected // invalidates list and sets weak reference void connect(); List list_; Callback_ data_; Callback_& callback() {return data_;} SlotData() {dep_.set_parent(this);} virtual ~SlotData(); }; typedef Scopes::Extend SlotExtend; #ifdef LIBSIGC_MSC #pragma warning(disable: 4231) LIBSIGC_TMPL template class LIBSIGC_API Handle; #endif class LIBSIGC_API Connection:protected Handle { typedef Handle Base; public: // hides virtual method void disconnect() {if (obj()) obj()->invalid();} bool connected() {return Base::connected ();} Connection():Base() {} Connection(SlotData *s):Base(s) {} Connection(const Connection& s):Base(s) { } ~Connection() {} }; // possible casts of Callback template struct CallDataFunc { C callback; F func; }; template struct CallDataObj2 { C callback; O *obj; }; template struct CallDataObj3 { C callback; O* obj; F func; }; // from Abstract_Slots we build abstract slots // with various lengths of arguments // A slot is not concrete til it has a call /**************************************************************** ***** Abstract Slot 0 ****************************************************************/ template struct Callback0:public Callback_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef Trait::type RType; #endif typedef RType (*Func)(void*); inline RType call() {return ((Func)(func_))((void*)this);} inline RType operator()() {return ((Func)(func_))((void*)this);} }; template class Slot0 :public Handle { public: typedef Handle Base; typedef Callback0 Callback; typedef typename Callback::RType RType; typedef RType (*Func)(void*); SlotData* data() const {return (SlotData*)(scope_.object());} Slot0() {} Slot0(SlotData *s):Base(s) {} Slot0(const Slot0& s):Base(s.obj()) {} inline RType call() { if (connected()) return ((Callback&)(data()->callback())).call(); return RType(); } inline RType operator()() { if (connected()) return ((Callback&)(data()->callback())).call(); return RType(); } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template <> struct Callback0:public Callback_ { typedef void RType; typedef RType (*Func)(void*); inline RType call() {((Func)(func_))((void*)this);} inline RType operator()() {((Func)(func_))((void*)this);} }; template <> class Slot0 :public Handle { public: typedef Handle Base; typedef Callback0 Callback; typedef Callback::RType RType; typedef RType (*Func)(void*); SlotData* data() const {return (SlotData*)(scope_.object());} Slot0() {} Slot0(SlotData *s):Base(s) {} Slot0(const Slot0& s):Base(s.obj()) {} inline RType call() { if (connected()) ((Callback&)(data()->callback())).call(); } inline RType operator()() { if (connected()) ((Callback&)(data()->callback())).call(); } }; #endif #endif /**************************************************************** ***** Abstract Slot 1 ****************************************************************/ template struct Callback1:public Callback_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef Trait::type RType; #endif typedef RType (*Func)(void*,P1); inline RType call(typename Trait::ref p1) {return ((Func)(func_))((void*)this,p1);} inline RType operator()(typename Trait::ref p1) {return ((Func)(func_))((void*)this,p1);} }; template class Slot1 :public Handle { public: typedef Handle Base; typedef Callback1 Callback; typedef typename Callback::RType RType; typedef RType (*Func)(void*,P1); SlotData* data() const {return (SlotData*)(scope_.object());} Slot1() {} Slot1(SlotData *s):Base(s) {} Slot1(const Slot1& s):Base(s.obj()) {} inline RType call(typename Trait::ref p1) { if (connected()) return ((Callback&)(data()->callback())).call(p1); return RType(); } inline RType operator()(typename Trait::ref p1) { if (connected()) return ((Callback&)(data()->callback())).call(p1); return RType(); } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct Callback1:public Callback_ { typedef void RType; typedef RType (*Func)(void*,P1); inline RType call(typename Trait::ref p1) {((Func)(func_))((void*)this,p1);} inline RType operator()(typename Trait::ref p1) {((Func)(func_))((void*)this,p1);} }; template class Slot1 :public Handle { public: typedef Handle Base; typedef Callback1 Callback; typedef typename Callback::RType RType; typedef RType (*Func)(void*,P1); SlotData* data() const {return (SlotData*)(scope_.object());} Slot1() {} Slot1(SlotData *s):Base(s) {} Slot1(const Slot1& s):Base(s.obj()) {} inline RType call(typename Trait::ref p1) { if (connected()) ((Callback&)(data()->callback())).call(p1); } inline RType operator()(typename Trait::ref p1) { if (connected()) ((Callback&)(data()->callback())).call(p1); } }; #endif #endif /**************************************************************** ***** Abstract Slot 2 ****************************************************************/ template struct Callback2:public Callback_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef Trait::type RType; #endif typedef RType (*Func)(void*,P1,P2); inline RType call(typename Trait::ref p1,typename Trait::ref p2) {return ((Func)(func_))((void*)this,p1,p2);} inline RType operator()(typename Trait::ref p1,typename Trait::ref p2) {return ((Func)(func_))((void*)this,p1,p2);} }; template class Slot2 :public Handle { public: typedef Handle Base; typedef Callback2 Callback; typedef typename Callback::RType RType; typedef RType (*Func)(void*,P1,P2); SlotData* data() const {return (SlotData*)(scope_.object());} Slot2() {} Slot2(SlotData *s):Base(s) {} Slot2(const Slot2& s):Base(s.obj()) {} inline RType call(typename Trait::ref p1,typename Trait::ref p2) { if (connected()) return ((Callback&)(data()->callback())).call(p1,p2); return RType(); } inline RType operator()(typename Trait::ref p1,typename Trait::ref p2) { if (connected()) return ((Callback&)(data()->callback())).call(p1,p2); return RType(); } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct Callback2:public Callback_ { typedef void RType; typedef RType (*Func)(void*,P1,P2); inline RType call(typename Trait::ref p1,typename Trait::ref p2) {((Func)(func_))((void*)this,p1,p2);} inline RType operator()(typename Trait::ref p1,typename Trait::ref p2) {((Func)(func_))((void*)this,p1,p2);} }; template class Slot2 :public Handle { public: typedef Handle Base; typedef Callback2 Callback; typedef typename Callback::RType RType; typedef RType (*Func)(void*,P1,P2); SlotData* data() const {return (SlotData*)(scope_.object());} Slot2() {} Slot2(SlotData *s):Base(s) {} Slot2(const Slot2& s):Base(s.obj()) {} inline RType call(typename Trait::ref p1,typename Trait::ref p2) { if (connected()) ((Callback&)(data()->callback())).call(p1,p2); } inline RType operator()(typename Trait::ref p1,typename Trait::ref p2) { if (connected()) ((Callback&)(data()->callback())).call(p1,p2); } }; #endif #endif /**************************************************************** ***** Abstract Slot 3 ****************************************************************/ template struct Callback3:public Callback_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef Trait::type RType; #endif typedef RType (*Func)(void*,P1,P2,P3); inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3) {return ((Func)(func_))((void*)this,p1,p2,p3);} inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3) {return ((Func)(func_))((void*)this,p1,p2,p3);} }; template class Slot3 :public Handle { public: typedef Handle Base; typedef Callback3 Callback; typedef typename Callback::RType RType; typedef RType (*Func)(void*,P1,P2,P3); SlotData* data() const {return (SlotData*)(scope_.object());} Slot3() {} Slot3(SlotData *s):Base(s) {} Slot3(const Slot3& s):Base(s.obj()) {} inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3) { if (connected()) return ((Callback&)(data()->callback())).call(p1,p2,p3); return RType(); } inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3) { if (connected()) return ((Callback&)(data()->callback())).call(p1,p2,p3); return RType(); } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct Callback3:public Callback_ { typedef void RType; typedef RType (*Func)(void*,P1,P2,P3); inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3) {((Func)(func_))((void*)this,p1,p2,p3);} inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3) {((Func)(func_))((void*)this,p1,p2,p3);} }; template class Slot3 :public Handle { public: typedef Handle Base; typedef Callback3 Callback; typedef typename Callback::RType RType; typedef RType (*Func)(void*,P1,P2,P3); SlotData* data() const {return (SlotData*)(scope_.object());} Slot3() {} Slot3(SlotData *s):Base(s) {} Slot3(const Slot3& s):Base(s.obj()) {} inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3) { if (connected()) ((Callback&)(data()->callback())).call(p1,p2,p3); } inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3) { if (connected()) ((Callback&)(data()->callback())).call(p1,p2,p3); } }; #endif #endif /**************************************************************** ***** Abstract Slot 4 ****************************************************************/ template struct Callback4:public Callback_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef Trait::type RType; #endif typedef RType (*Func)(void*,P1,P2,P3,P4); inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4) {return ((Func)(func_))((void*)this,p1,p2,p3,p4);} inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4) {return ((Func)(func_))((void*)this,p1,p2,p3,p4);} }; template class Slot4 :public Handle { public: typedef Handle Base; typedef Callback4 Callback; typedef typename Callback::RType RType; typedef RType (*Func)(void*,P1,P2,P3,P4); SlotData* data() const {return (SlotData*)(scope_.object());} Slot4() {} Slot4(SlotData *s):Base(s) {} Slot4(const Slot4& s):Base(s.obj()) {} inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4) { if (connected()) return ((Callback&)(data()->callback())).call(p1,p2,p3,p4); return RType(); } inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4) { if (connected()) return ((Callback&)(data()->callback())).call(p1,p2,p3,p4); return RType(); } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct Callback4:public Callback_ { typedef void RType; typedef RType (*Func)(void*,P1,P2,P3,P4); inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4) {((Func)(func_))((void*)this,p1,p2,p3,p4);} inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4) {((Func)(func_))((void*)this,p1,p2,p3,p4);} }; template class Slot4 :public Handle { public: typedef Handle Base; typedef Callback4 Callback; typedef typename Callback::RType RType; typedef RType (*Func)(void*,P1,P2,P3,P4); SlotData* data() const {return (SlotData*)(scope_.object());} Slot4() {} Slot4(SlotData *s):Base(s) {} Slot4(const Slot4& s):Base(s.obj()) {} inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4) { if (connected()) ((Callback&)(data()->callback())).call(p1,p2,p3,p4); } inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4) { if (connected()) ((Callback&)(data()->callback())).call(p1,p2,p3,p4); } }; #endif #endif /**************************************************************** ***** Abstract Slot 5 ****************************************************************/ template struct Callback5:public Callback_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef Trait::type RType; #endif typedef RType (*Func)(void*,P1,P2,P3,P4,P5); inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5) {return ((Func)(func_))((void*)this,p1,p2,p3,p4,p5);} inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5) {return ((Func)(func_))((void*)this,p1,p2,p3,p4,p5);} }; template class Slot5 :public Handle { public: typedef Handle Base; typedef Callback5 Callback; typedef typename Callback::RType RType; typedef RType (*Func)(void*,P1,P2,P3,P4,P5); SlotData* data() const {return (SlotData*)(scope_.object());} Slot5() {} Slot5(SlotData *s):Base(s) {} Slot5(const Slot5& s):Base(s.obj()) {} inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5) { if (connected()) return ((Callback&)(data()->callback())).call(p1,p2,p3,p4,p5); return RType(); } inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5) { if (connected()) return ((Callback&)(data()->callback())).call(p1,p2,p3,p4,p5); return RType(); } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct Callback5:public Callback_ { typedef void RType; typedef RType (*Func)(void*,P1,P2,P3,P4,P5); inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5) {((Func)(func_))((void*)this,p1,p2,p3,p4,p5);} inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5) {((Func)(func_))((void*)this,p1,p2,p3,p4,p5);} }; template class Slot5 :public Handle { public: typedef Handle Base; typedef Callback5 Callback; typedef typename Callback::RType RType; typedef RType (*Func)(void*,P1,P2,P3,P4,P5); SlotData* data() const {return (SlotData*)(scope_.object());} Slot5() {} Slot5(SlotData *s):Base(s) {} Slot5(const Slot5& s):Base(s.obj()) {} inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5) { if (connected()) ((Callback&)(data()->callback())).call(p1,p2,p3,p4,p5); } inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5) { if (connected()) ((Callback&)(data()->callback())).call(p1,p2,p3,p4,p5); } }; #endif #endif /**************************************************************** ***** Abstract Slot 6 ****************************************************************/ template struct Callback6:public Callback_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef Trait::type RType; #endif typedef RType (*Func)(void*,P1,P2,P3,P4,P5,P6); inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6) {return ((Func)(func_))((void*)this,p1,p2,p3,p4,p5,p6);} inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6) {return ((Func)(func_))((void*)this,p1,p2,p3,p4,p5,p6);} }; template class Slot6 :public Handle { public: typedef Handle Base; typedef Callback6 Callback; typedef typename Callback::RType RType; typedef RType (*Func)(void*,P1,P2,P3,P4,P5,P6); SlotData* data() const {return (SlotData*)(scope_.object());} Slot6() {} Slot6(SlotData *s):Base(s) {} Slot6(const Slot6& s):Base(s.obj()) {} inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6) { if (connected()) return ((Callback&)(data()->callback())).call(p1,p2,p3,p4,p5,p6); return RType(); } inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6) { if (connected()) return ((Callback&)(data()->callback())).call(p1,p2,p3,p4,p5,p6); return RType(); } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct Callback6:public Callback_ { typedef void RType; typedef RType (*Func)(void*,P1,P2,P3,P4,P5,P6); inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6) {((Func)(func_))((void*)this,p1,p2,p3,p4,p5,p6);} inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6) {((Func)(func_))((void*)this,p1,p2,p3,p4,p5,p6);} }; template class Slot6 :public Handle { public: typedef Handle Base; typedef Callback6 Callback; typedef typename Callback::RType RType; typedef RType (*Func)(void*,P1,P2,P3,P4,P5,P6); SlotData* data() const {return (SlotData*)(scope_.object());} Slot6() {} Slot6(SlotData *s):Base(s) {} Slot6(const Slot6& s):Base(s.obj()) {} inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6) { if (connected()) ((Callback&)(data()->callback())).call(p1,p2,p3,p4,p5,p6); } inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6) { if (connected()) ((Callback&)(data()->callback())).call(p1,p2,p3,p4,p5,p6); } }; #endif #endif /**************************************************************** ***** Abstract Slot 7 ****************************************************************/ template struct Callback7:public Callback_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef Trait::type RType; #endif typedef RType (*Func)(void*,P1,P2,P3,P4,P5,P6,P7); inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6,typename Trait::ref p7) {return ((Func)(func_))((void*)this,p1,p2,p3,p4,p5,p6,p7);} inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6,typename Trait::ref p7) {return ((Func)(func_))((void*)this,p1,p2,p3,p4,p5,p6,p7);} }; template class Slot7 :public Handle { public: typedef Handle Base; typedef Callback7 Callback; typedef typename Callback::RType RType; typedef RType (*Func)(void*,P1,P2,P3,P4,P5,P6,P7); SlotData* data() const {return (SlotData*)(scope_.object());} Slot7() {} Slot7(SlotData *s):Base(s) {} Slot7(const Slot7& s):Base(s.obj()) {} inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6,typename Trait::ref p7) { if (connected()) return ((Callback&)(data()->callback())).call(p1,p2,p3,p4,p5,p6,p7); return RType(); } inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6,typename Trait::ref p7) { if (connected()) return ((Callback&)(data()->callback())).call(p1,p2,p3,p4,p5,p6,p7); return RType(); } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct Callback7:public Callback_ { typedef void RType; typedef RType (*Func)(void*,P1,P2,P3,P4,P5,P6,P7); inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6,typename Trait::ref p7) {((Func)(func_))((void*)this,p1,p2,p3,p4,p5,p6,p7);} inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6,typename Trait::ref p7) {((Func)(func_))((void*)this,p1,p2,p3,p4,p5,p6,p7);} }; template class Slot7 :public Handle { public: typedef Handle Base; typedef Callback7 Callback; typedef typename Callback::RType RType; typedef RType (*Func)(void*,P1,P2,P3,P4,P5,P6,P7); SlotData* data() const {return (SlotData*)(scope_.object());} Slot7() {} Slot7(SlotData *s):Base(s) {} Slot7(const Slot7& s):Base(s.obj()) {} inline RType call(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6,typename Trait::ref p7) { if (connected()) ((Callback&)(data()->callback())).call(p1,p2,p3,p4,p5,p6,p7); } inline RType operator()(typename Trait::ref p1,typename Trait::ref p2,typename Trait::ref p3,typename Trait::ref p4,typename Trait::ref p5,typename Trait::ref p6,typename Trait::ref p7) { if (connected()) ((Callback&)(data()->callback())).call(p1,p2,p3,p4,p5,p6,p7); } }; #endif #endif #ifdef SIGC_CXX_NAMESPACES } // namespace #endif #endif // SIGCXX_SLOT_H