// -*- c++ -*- /* This is a generated file, do not edit. Generated from ../sigc++/macros/bind.h.m4 */ #ifndef SIGCXX_BIND_H #define SIGCXX_BIND_H /* SigC::bind ------------- bind() alters a Slot by fixing arguments to certain values. Argument fixing starts from the last argument. The slot is destroyed in the process and a new one is created, so references holding onto the slot will no longer be valid. Up to two arguments can be bound at a time with the default header. Simple Sample usage: void f(int,int); Slot2 s1=slot(f); Slot1 s2=bind(s1,1); // s1 is invalid s2(2); // call f with arguments 2,1 Multibinding usage: void f(int,int); Slot2 s1=slot(f); Slot0 s2=bind(s1,1,2); // s1 is invalid s2(); // call f with arguments 1,2 Type specified usage: struct A {}; struct B :public A {}; B* b; Slot0 s1; Slot0 s2=bind(s1, b); // B* converted to A* */ #include #include #ifdef SIGC_CXX_NAMESPACES namespace SigC { #endif /**************************************************************** ***** Adaptor Bind Slot 0 arguments, 1 hidden arguments ****************************************************************/ template struct AdaptorBindSlot0_1: public AdaptorSlot_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef typename Trait::type RType; #endif typedef Slot0 SlotType; typedef Slot1 InSlotType; struct Node:public AdaptorNode { C1 c1_; Node(C1 c1) : c1_(c1) { } }; typedef CallDataObj2 CallData; static RType callback(void* d) { CallData* data=(CallData*)d; Node* node=data->obj; return ((typename InSlotType::Callback&)(node->data_))( node->c1_); } static SlotData* create(SlotData *s,C1 c1) { Node *node=new Node(c1); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template < class C1> struct AdaptorBindSlot0_1 : public AdaptorSlot_ { typedef void RType; typedef Slot0 SlotType; typedef Slot1 InSlotType; struct Node:public AdaptorNode { C1 c1_; Node(C1 c1) : c1_(c1) { } }; typedef CallDataObj2 CallData; static RType callback(void* d) { CallData* data=(CallData*)d; Node* node=data->obj; ((typename InSlotType::Callback&)(node->data_))( node->c1_); } static SlotData* create(SlotData *s,C1 c1) { Node *node=new Node(c1); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #endif #endif template inline Slot0 bind(const Slot1 &s, A1 a1) {return AdaptorBindSlot0_1::create(s.data(),a1); } /**************************************************************** ***** Adaptor Bind Slot 1 arguments, 1 hidden arguments ****************************************************************/ template struct AdaptorBindSlot1_1: public AdaptorSlot_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef typename Trait::type RType; #endif typedef Slot1 SlotType; typedef Slot2 InSlotType; struct Node:public AdaptorNode { C1 c1_; Node(C1 c1) : c1_(c1) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1) { CallData* data=(CallData*)d; Node* node=data->obj; return ((typename InSlotType::Callback&)(node->data_))(p1, node->c1_); } static SlotData* create(SlotData *s,C1 c1) { Node *node=new Node(c1); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct AdaptorBindSlot1_1 : public AdaptorSlot_ { typedef void RType; typedef Slot1 SlotType; typedef Slot2 InSlotType; struct Node:public AdaptorNode { C1 c1_; Node(C1 c1) : c1_(c1) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1) { CallData* data=(CallData*)d; Node* node=data->obj; ((typename InSlotType::Callback&)(node->data_))(p1, node->c1_); } static SlotData* create(SlotData *s,C1 c1) { Node *node=new Node(c1); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #endif #endif template inline Slot1 bind(const Slot2 &s, A1 a1) {return AdaptorBindSlot1_1::create(s.data(),a1); } /**************************************************************** ***** Adaptor Bind Slot 2 arguments, 1 hidden arguments ****************************************************************/ template struct AdaptorBindSlot2_1: public AdaptorSlot_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef typename Trait::type RType; #endif typedef Slot2 SlotType; typedef Slot3 InSlotType; struct Node:public AdaptorNode { C1 c1_; Node(C1 c1) : c1_(c1) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2) { CallData* data=(CallData*)d; Node* node=data->obj; return ((typename InSlotType::Callback&)(node->data_))(p1,p2, node->c1_); } static SlotData* create(SlotData *s,C1 c1) { Node *node=new Node(c1); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct AdaptorBindSlot2_1 : public AdaptorSlot_ { typedef void RType; typedef Slot2 SlotType; typedef Slot3 InSlotType; struct Node:public AdaptorNode { C1 c1_; Node(C1 c1) : c1_(c1) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2) { CallData* data=(CallData*)d; Node* node=data->obj; ((typename InSlotType::Callback&)(node->data_))(p1,p2, node->c1_); } static SlotData* create(SlotData *s,C1 c1) { Node *node=new Node(c1); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #endif #endif template inline Slot2 bind(const Slot3 &s, A1 a1) {return AdaptorBindSlot2_1::create(s.data(),a1); } /**************************************************************** ***** Adaptor Bind Slot 3 arguments, 1 hidden arguments ****************************************************************/ template struct AdaptorBindSlot3_1: public AdaptorSlot_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef typename Trait::type RType; #endif typedef Slot3 SlotType; typedef Slot4 InSlotType; struct Node:public AdaptorNode { C1 c1_; Node(C1 c1) : c1_(c1) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2,P3 p3) { CallData* data=(CallData*)d; Node* node=data->obj; return ((typename InSlotType::Callback&)(node->data_))(p1,p2,p3, node->c1_); } static SlotData* create(SlotData *s,C1 c1) { Node *node=new Node(c1); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct AdaptorBindSlot3_1 : public AdaptorSlot_ { typedef void RType; typedef Slot3 SlotType; typedef Slot4 InSlotType; struct Node:public AdaptorNode { C1 c1_; Node(C1 c1) : c1_(c1) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2,P3 p3) { CallData* data=(CallData*)d; Node* node=data->obj; ((typename InSlotType::Callback&)(node->data_))(p1,p2,p3, node->c1_); } static SlotData* create(SlotData *s,C1 c1) { Node *node=new Node(c1); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #endif #endif template inline Slot3 bind(const Slot4 &s, A1 a1) {return AdaptorBindSlot3_1::create(s.data(),a1); } /**************************************************************** ***** Adaptor Bind Slot 4 arguments, 1 hidden arguments ****************************************************************/ template struct AdaptorBindSlot4_1: public AdaptorSlot_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef typename Trait::type RType; #endif typedef Slot4 SlotType; typedef Slot5 InSlotType; struct Node:public AdaptorNode { C1 c1_; Node(C1 c1) : c1_(c1) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2,P3 p3,P4 p4) { CallData* data=(CallData*)d; Node* node=data->obj; return ((typename InSlotType::Callback&)(node->data_))(p1,p2,p3,p4, node->c1_); } static SlotData* create(SlotData *s,C1 c1) { Node *node=new Node(c1); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct AdaptorBindSlot4_1 : public AdaptorSlot_ { typedef void RType; typedef Slot4 SlotType; typedef Slot5 InSlotType; struct Node:public AdaptorNode { C1 c1_; Node(C1 c1) : c1_(c1) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2,P3 p3,P4 p4) { CallData* data=(CallData*)d; Node* node=data->obj; ((typename InSlotType::Callback&)(node->data_))(p1,p2,p3,p4, node->c1_); } static SlotData* create(SlotData *s,C1 c1) { Node *node=new Node(c1); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #endif #endif template inline Slot4 bind(const Slot5 &s, A1 a1) {return AdaptorBindSlot4_1::create(s.data(),a1); } /**************************************************************** ***** Adaptor Bind Slot 5 arguments, 1 hidden arguments ****************************************************************/ template struct AdaptorBindSlot5_1: public AdaptorSlot_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef typename Trait::type RType; #endif typedef Slot5 SlotType; typedef Slot6 InSlotType; struct Node:public AdaptorNode { C1 c1_; Node(C1 c1) : c1_(c1) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2,P3 p3,P4 p4,P5 p5) { CallData* data=(CallData*)d; Node* node=data->obj; return ((typename InSlotType::Callback&)(node->data_))(p1,p2,p3,p4,p5, node->c1_); } static SlotData* create(SlotData *s,C1 c1) { Node *node=new Node(c1); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct AdaptorBindSlot5_1 : public AdaptorSlot_ { typedef void RType; typedef Slot5 SlotType; typedef Slot6 InSlotType; struct Node:public AdaptorNode { C1 c1_; Node(C1 c1) : c1_(c1) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2,P3 p3,P4 p4,P5 p5) { CallData* data=(CallData*)d; Node* node=data->obj; ((typename InSlotType::Callback&)(node->data_))(p1,p2,p3,p4,p5, node->c1_); } static SlotData* create(SlotData *s,C1 c1) { Node *node=new Node(c1); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #endif #endif template inline Slot5 bind(const Slot6 &s, A1 a1) {return AdaptorBindSlot5_1::create(s.data(),a1); } /**************************************************************** ***** Adaptor Bind Slot 6 arguments, 1 hidden arguments ****************************************************************/ template struct AdaptorBindSlot6_1: public AdaptorSlot_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef typename Trait::type RType; #endif typedef Slot6 SlotType; typedef Slot7 InSlotType; struct Node:public AdaptorNode { C1 c1_; Node(C1 c1) : c1_(c1) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2,P3 p3,P4 p4,P5 p5,P6 p6) { CallData* data=(CallData*)d; Node* node=data->obj; return ((typename InSlotType::Callback&)(node->data_))(p1,p2,p3,p4,p5,p6, node->c1_); } static SlotData* create(SlotData *s,C1 c1) { Node *node=new Node(c1); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct AdaptorBindSlot6_1 : public AdaptorSlot_ { typedef void RType; typedef Slot6 SlotType; typedef Slot7 InSlotType; struct Node:public AdaptorNode { C1 c1_; Node(C1 c1) : c1_(c1) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2,P3 p3,P4 p4,P5 p5,P6 p6) { CallData* data=(CallData*)d; Node* node=data->obj; ((typename InSlotType::Callback&)(node->data_))(p1,p2,p3,p4,p5,p6, node->c1_); } static SlotData* create(SlotData *s,C1 c1) { Node *node=new Node(c1); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #endif #endif template inline Slot6 bind(const Slot7 &s, A1 a1) {return AdaptorBindSlot6_1::create(s.data(),a1); } /**************************************************************** ***** Adaptor Bind Slot 0 arguments, 2 hidden arguments ****************************************************************/ template struct AdaptorBindSlot0_2: public AdaptorSlot_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef typename Trait::type RType; #endif typedef Slot0 SlotType; typedef Slot2 InSlotType; struct Node:public AdaptorNode { C1 c1_; C2 c2_; Node(C1 c1,C2 c2) : c1_(c1),c2_(c2) { } }; typedef CallDataObj2 CallData; static RType callback(void* d) { CallData* data=(CallData*)d; Node* node=data->obj; return ((typename InSlotType::Callback&)(node->data_))( node->c1_,node->c2_); } static SlotData* create(SlotData *s,C1 c1,C2 c2) { Node *node=new Node(c1,c2); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template < class C1,class C2> struct AdaptorBindSlot0_2 : public AdaptorSlot_ { typedef void RType; typedef Slot0 SlotType; typedef Slot2 InSlotType; struct Node:public AdaptorNode { C1 c1_; C2 c2_; Node(C1 c1,C2 c2) : c1_(c1),c2_(c2) { } }; typedef CallDataObj2 CallData; static RType callback(void* d) { CallData* data=(CallData*)d; Node* node=data->obj; ((typename InSlotType::Callback&)(node->data_))( node->c1_,node->c2_); } static SlotData* create(SlotData *s,C1 c1,C2 c2) { Node *node=new Node(c1,c2); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #endif #endif template inline Slot0 bind(const Slot2 &s, A1 a1,A2 a2) {return AdaptorBindSlot0_2::create(s.data(),a1,a2); } /**************************************************************** ***** Adaptor Bind Slot 1 arguments, 2 hidden arguments ****************************************************************/ template struct AdaptorBindSlot1_2: public AdaptorSlot_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef typename Trait::type RType; #endif typedef Slot1 SlotType; typedef Slot3 InSlotType; struct Node:public AdaptorNode { C1 c1_; C2 c2_; Node(C1 c1,C2 c2) : c1_(c1),c2_(c2) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1) { CallData* data=(CallData*)d; Node* node=data->obj; return ((typename InSlotType::Callback&)(node->data_))(p1, node->c1_,node->c2_); } static SlotData* create(SlotData *s,C1 c1,C2 c2) { Node *node=new Node(c1,c2); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct AdaptorBindSlot1_2 : public AdaptorSlot_ { typedef void RType; typedef Slot1 SlotType; typedef Slot3 InSlotType; struct Node:public AdaptorNode { C1 c1_; C2 c2_; Node(C1 c1,C2 c2) : c1_(c1),c2_(c2) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1) { CallData* data=(CallData*)d; Node* node=data->obj; ((typename InSlotType::Callback&)(node->data_))(p1, node->c1_,node->c2_); } static SlotData* create(SlotData *s,C1 c1,C2 c2) { Node *node=new Node(c1,c2); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #endif #endif template inline Slot1 bind(const Slot3 &s, A1 a1,A2 a2) {return AdaptorBindSlot1_2::create(s.data(),a1,a2); } /**************************************************************** ***** Adaptor Bind Slot 2 arguments, 2 hidden arguments ****************************************************************/ template struct AdaptorBindSlot2_2: public AdaptorSlot_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef typename Trait::type RType; #endif typedef Slot2 SlotType; typedef Slot4 InSlotType; struct Node:public AdaptorNode { C1 c1_; C2 c2_; Node(C1 c1,C2 c2) : c1_(c1),c2_(c2) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2) { CallData* data=(CallData*)d; Node* node=data->obj; return ((typename InSlotType::Callback&)(node->data_))(p1,p2, node->c1_,node->c2_); } static SlotData* create(SlotData *s,C1 c1,C2 c2) { Node *node=new Node(c1,c2); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct AdaptorBindSlot2_2 : public AdaptorSlot_ { typedef void RType; typedef Slot2 SlotType; typedef Slot4 InSlotType; struct Node:public AdaptorNode { C1 c1_; C2 c2_; Node(C1 c1,C2 c2) : c1_(c1),c2_(c2) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2) { CallData* data=(CallData*)d; Node* node=data->obj; ((typename InSlotType::Callback&)(node->data_))(p1,p2, node->c1_,node->c2_); } static SlotData* create(SlotData *s,C1 c1,C2 c2) { Node *node=new Node(c1,c2); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #endif #endif template inline Slot2 bind(const Slot4 &s, A1 a1,A2 a2) {return AdaptorBindSlot2_2::create(s.data(),a1,a2); } /**************************************************************** ***** Adaptor Bind Slot 3 arguments, 2 hidden arguments ****************************************************************/ template struct AdaptorBindSlot3_2: public AdaptorSlot_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef typename Trait::type RType; #endif typedef Slot3 SlotType; typedef Slot5 InSlotType; struct Node:public AdaptorNode { C1 c1_; C2 c2_; Node(C1 c1,C2 c2) : c1_(c1),c2_(c2) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2,P3 p3) { CallData* data=(CallData*)d; Node* node=data->obj; return ((typename InSlotType::Callback&)(node->data_))(p1,p2,p3, node->c1_,node->c2_); } static SlotData* create(SlotData *s,C1 c1,C2 c2) { Node *node=new Node(c1,c2); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct AdaptorBindSlot3_2 : public AdaptorSlot_ { typedef void RType; typedef Slot3 SlotType; typedef Slot5 InSlotType; struct Node:public AdaptorNode { C1 c1_; C2 c2_; Node(C1 c1,C2 c2) : c1_(c1),c2_(c2) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2,P3 p3) { CallData* data=(CallData*)d; Node* node=data->obj; ((typename InSlotType::Callback&)(node->data_))(p1,p2,p3, node->c1_,node->c2_); } static SlotData* create(SlotData *s,C1 c1,C2 c2) { Node *node=new Node(c1,c2); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #endif #endif template inline Slot3 bind(const Slot5 &s, A1 a1,A2 a2) {return AdaptorBindSlot3_2::create(s.data(),a1,a2); } /**************************************************************** ***** Adaptor Bind Slot 4 arguments, 2 hidden arguments ****************************************************************/ template struct AdaptorBindSlot4_2: public AdaptorSlot_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef typename Trait::type RType; #endif typedef Slot4 SlotType; typedef Slot6 InSlotType; struct Node:public AdaptorNode { C1 c1_; C2 c2_; Node(C1 c1,C2 c2) : c1_(c1),c2_(c2) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2,P3 p3,P4 p4) { CallData* data=(CallData*)d; Node* node=data->obj; return ((typename InSlotType::Callback&)(node->data_))(p1,p2,p3,p4, node->c1_,node->c2_); } static SlotData* create(SlotData *s,C1 c1,C2 c2) { Node *node=new Node(c1,c2); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct AdaptorBindSlot4_2 : public AdaptorSlot_ { typedef void RType; typedef Slot4 SlotType; typedef Slot6 InSlotType; struct Node:public AdaptorNode { C1 c1_; C2 c2_; Node(C1 c1,C2 c2) : c1_(c1),c2_(c2) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2,P3 p3,P4 p4) { CallData* data=(CallData*)d; Node* node=data->obj; ((typename InSlotType::Callback&)(node->data_))(p1,p2,p3,p4, node->c1_,node->c2_); } static SlotData* create(SlotData *s,C1 c1,C2 c2) { Node *node=new Node(c1,c2); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #endif #endif template inline Slot4 bind(const Slot6 &s, A1 a1,A2 a2) {return AdaptorBindSlot4_2::create(s.data(),a1,a2); } /**************************************************************** ***** Adaptor Bind Slot 5 arguments, 2 hidden arguments ****************************************************************/ template struct AdaptorBindSlot5_2: public AdaptorSlot_ { #ifdef SIGC_CXX_PARTIAL_SPEC typedef R RType; #else typedef typename Trait::type RType; #endif typedef Slot5 SlotType; typedef Slot7 InSlotType; struct Node:public AdaptorNode { C1 c1_; C2 c2_; Node(C1 c1,C2 c2) : c1_(c1),c2_(c2) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2,P3 p3,P4 p4,P5 p5) { CallData* data=(CallData*)d; Node* node=data->obj; return ((typename InSlotType::Callback&)(node->data_))(p1,p2,p3,p4,p5, node->c1_,node->c2_); } static SlotData* create(SlotData *s,C1 c1,C2 c2) { Node *node=new Node(c1,c2); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #ifndef SIGC_CXX_VOID_RETURN #ifdef SIGC_CXX_PARTIAL_SPEC template struct AdaptorBindSlot5_2 : public AdaptorSlot_ { typedef void RType; typedef Slot5 SlotType; typedef Slot7 InSlotType; struct Node:public AdaptorNode { C1 c1_; C2 c2_; Node(C1 c1,C2 c2) : c1_(c1),c2_(c2) { } }; typedef CallDataObj2 CallData; static RType callback(void* d,P1 p1,P2 p2,P3 p3,P4 p4,P5 p5) { CallData* data=(CallData*)d; Node* node=data->obj; ((typename InSlotType::Callback&)(node->data_))(p1,p2,p3,p4,p5, node->c1_,node->c2_); } static SlotData* create(SlotData *s,C1 c1,C2 c2) { Node *node=new Node(c1,c2); copy_callback(s,node); CallData &data=reinterpret_cast(s->data_); data.callback=&callback; data.obj=node; return s; } }; #endif #endif template inline Slot5 bind(const Slot7 &s, A1 a1,A2 a2) {return AdaptorBindSlot5_2::create(s.data(),a1,a2); } #ifdef SIGC_CXX_NAMESPACES } // namespace #endif #endif