//****************************************************************************** // RCF - Remote Call Framework // Copyright (c) 2005 - 2007. All rights reserved. // Consult your license for conditions of use. // Developed by Jarl Lindrud. // Contact: jlindrud@hotmail.com . //****************************************************************************** #ifndef INCLUDE_RCF_IDL_HPP #define INCLUDE_RCF_IDL_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // RCF_BEGIN /// Alias for RCF_BEGIN_INHERITED_0 #define RCF_BEGIN(InterfaceT, Name) RCF_BEGIN_I0(InterfaceT, Name) // RCF_BEGIN_INHERITED /// Alias for RCF_BEGIN_INHERITED_1 //#define RCF_BEGIN_INHERITED(InterfaceT, Name, InheritT) RCF_BEGIN_INHERITED_1(InterfaceT, Name, InheritT) // RCF_BEGIN_INHERITED_0 /// Marks the beginning of the definition of a RCF interface. /// \param InterfaceT Interface name (symbolic). /// \param Name Interface name (string). If "", then the name will be auto generated from the symbolic name. #define RCF_BEGIN_I0(InterfaceT, Name) \ RCF_BEGIN_IMPL_PRELUDE(InterfaceT, Name) \ RCF_BEGIN_IMPL_INHERITED_0(InterfaceT, Name) \ RCF_BEGIN_IMPL_POSTLUDE(InterfaceT, Name) // RCF_BEGIN_INHERITED_1 /// Marks the beginning of the definition of a inherited RCF interface. /// \param InterfaceT Interface name (symbolic). /// \param Name Interface name (string). If "", then the name will be auto generated from the symbolic name. /// \param InheritT Interface to derive from. May be a generic C++ class, for instance an abstract base class, or a RCF interface. #define RCF_BEGIN_I1(InterfaceT, Name, InheritT1) \ RCF_BEGIN_IMPL_PRELUDE(InterfaceT, Name) \ RCF_BEGIN_IMPL_INHERITED_1(InterfaceT, Name, InheritT1) \ RCF_BEGIN_IMPL_POSTLUDE(InterfaceT, Name) // RCF_BEGIN_INHERITED_2 /// Marks the beginning of the definition of a inherited RCF interface. /// \param InterfaceT Interface name (symbolic). /// \param Name Interface name (string). If "", then the name will be auto generated from the symbolic name. /// \param InheritT1 First interface to derive from. May be a generic C++ class, for instance an abstract base class, or a RCF interface. /// \param InheritT2 Second interface to derive from. May be a generic C++ class, for instance an abstract base class, or a RCF interface. #define RCF_BEGIN_I2(InterfaceT, Name, InheritT1, InheritT2) \ RCF_BEGIN_IMPL_PRELUDE(InterfaceT, Name) \ RCF_BEGIN_IMPL_INHERITED_2(InterfaceT, Name, InheritT1, InheritT2) \ RCF_BEGIN_IMPL_POSTLUDE(InterfaceT, Name) // RCF_BEGIN_IMPL_PRELUDE #define RCF_BEGIN_IMPL_PRELUDE(InterfaceT, Name) \ \ template \ class RcfClient; \ \ class InterfaceT \ { \ public: \ typedef RcfClient RcfClient; \ static std::string getInterfaceName() \ { \ return std::string(Name) == "" ? #InterfaceT : Name; \ } \ }; // RCF_BEGIN_IMPL_INHERITED_0 #define RCF_BEGIN_IMPL_INHERITED_0(InterfaceT, Name) \ template<> \ class RcfClient< InterfaceT > : \ public virtual ::RCF::I_RcfClient \ { \ private: \ template \ void registerInvokeFunctors(::RCF::InvokeFunctorMap &invokeFunctorMap, DerefPtrT derefPtr) \ { \ ::RCF::registerInvokeFunctors(*this, invokeFunctorMap, derefPtr); \ } \ void setClientStubPtr(::RCF::ClientStubPtr clientStubPtr) \ { \ mClientStubPtr = clientStubPtr; \ } // RCF_BEGIN_IMPL_INHERITED_1 #define RCF_BEGIN_IMPL_INHERITED_1(InterfaceT, Name, InheritT1) \ template<> \ class RcfClient< InterfaceT > : \ public virtual ::RCF::I_RcfClient, \ public virtual ::RCF::GetInterface::type \ { \ private: \ template \ void registerInvokeFunctors(::RCF::InvokeFunctorMap &invokeFunctorMap, DerefPtrT derefPtr) \ { \ ::RCF::registerInvokeFunctors(*this, invokeFunctorMap, derefPtr); \ ::RCF::StubAccess().registerParentInvokeFunctors( (InheritT1 *) NULL, *this, invokeFunctorMap, derefPtr); \ } \ void setClientStubPtr(::RCF::ClientStubPtr clientStubPtr) \ { \ mClientStubPtr = clientStubPtr; \ ::RCF::StubAccess().setClientStubPtr( (InheritT1*) 0, *this); \ } // RCF_BEGIN_IMPL_INHERITED_2 #define RCF_BEGIN_IMPL_INHERITED_2(InterfaceT, Name, InheritT1, InheritT2) \ template<> \ class RcfClient< InterfaceT > : \ public virtual ::RCF::I_RcfClient, \ public virtual ::RCF::GetInterface::type, \ public virtual ::RCF::GetInterface::type \ { \ private: \ template \ void registerInvokeFunctors(::RCF::InvokeFunctorMap &invokeFunctorMap, DerefPtrT derefPtr) \ { \ ::RCF::registerInvokeFunctors(*this, invokeFunctorMap, derefPtr); \ ::RCF::StubAccess().registerParentInvokeFunctors( (InheritT1 *) NULL, *this, invokeFunctorMap, derefPtr); \ ::RCF::StubAccess().registerParentInvokeFunctors( (InheritT2 *) NULL, *this, invokeFunctorMap, derefPtr); \ } \ void setClientStubPtr(::RCF::ClientStubPtr clientStubPtr) \ { \ mClientStubPtr = clientStubPtr; \ ::RCF::StubAccess().setClientStubPtr( (InheritT1*) 0, *this); \ ::RCF::StubAccess().setClientStubPtr( (InheritT2*) 0, *this); \ } // RCF_BEGIN_IMPL_POSTLUDE #define RCF_BEGIN_IMPL_POSTLUDE(InterfaceT, Name) \ public: \ \ RcfClient() \ {} \ \ template \ RcfClient(::RCF::ServerStubPtr serverStubPtr, DerefPtrT derefPtr) \ { \ serverStubPtr->registerInvokeFunctors(*this, derefPtr); \ mServerStubPtr = serverStubPtr; \ } \ \ RcfClient( \ const ::RCF::I_Endpoint &endpoint, \ const std::string &targetName_ = "") \ { \ const std::string &interfaceName = ::RCF::getInterfaceName( (InterfaceT *) NULL); \ const std::string &targetName = (targetName_ == "") ? interfaceName : targetName_; \ ::RCF::ClientStubPtr clientStubPtr( new ::RCF::ClientStub(interfaceName, targetName) ); \ clientStubPtr->setEndpoint(endpoint); \ setClientStubPtr(clientStubPtr); \ } \ \ RcfClient( \ ::RCF::ClientTransportAutoPtr clientTransportAutoPtr, \ const std::string &targetName_ = "") \ { \ const std::string &interfaceName = ::RCF::getInterfaceName( (InterfaceT *) NULL); \ const std::string &targetName = (targetName_ == "") ? interfaceName : targetName_; \ ::RCF::ClientStubPtr clientStubPtr( new ::RCF::ClientStub(interfaceName, targetName) ); \ clientStubPtr->setTransport(clientTransportAutoPtr); \ setClientStubPtr(clientStubPtr); \ } \ \ RcfClient( \ const ::RCF::ClientStub &clientStub, \ const std::string &targetName_ = "") \ { \ const std::string &interfaceName = ::RCF::getInterfaceName( (InterfaceT *) NULL); \ const std::string &targetName = (targetName_ == "") ? interfaceName : targetName_; \ ::RCF::ClientStubPtr clientStubPtr( new ::RCF::ClientStub(clientStub) ); \ clientStubPtr->setTargetName(targetName); \ setClientStubPtr(clientStubPtr); \ } \ \ template \ RcfClient( \ const RcfClient &rhs) \ { \ ::RCF::ClientStubPtr clientStubPtr( new ::RCF::ClientStub(rhs.getClientStub())); \ setClientStubPtr(clientStubPtr); \ } \ \ template \ RcfClient &operator=(const RcfClient &rhs) \ { \ if (&rhs != this) \ { \ ::RCF::ClientStubPtr clientStubPtr( new ::RCF::ClientStub(rhs.getClientStub())); \ setClientStubPtr(clientStubPtr); \ } \ return *this; \ } \ \ public: \ ::RCF::ClientStub &getClientStub() \ { \ return *mClientStubPtr; \ } \ \ const ::RCF::ClientStub &getClientStub() const \ { \ return *mClientStubPtr; \ } \ \ private: \ ::RCF::ServerStub &getServerStub() \ { \ return *mServerStubPtr; \ } \ \ public: \ template \ void serialize(Archive &ar, const unsigned int ver) \ { \ ::RCF::StubAccess().serialize(ar, *this, ver); \ } \ \ private: \ \ template \ void invoke( \ const T &, \ ::RCF::SerializationProtocolIn &, \ ::RCF::SerializationProtocolOut &, const U &) \ { \ RCF_THROW(::RCF::Exception(::RCF::RcfError_FnId))(typeid(T)); \ } \ \ ::RCF::ClientStubPtr mClientStubPtr; \ ::RCF::ServerStubPtr mServerStubPtr; \ friend class ::RCF::StubAccess; \ typedef RcfClient< InterfaceT > ThisT; \ typedef ::RCF::Dummy DummyThisT; \ friend RCF::default_ RCF_make_next_dispatch_id_func(DummyThisT *, ThisT *,...); \ public: \ typedef InterfaceT Interface; // RCF_END /// Marks the end of the definition of a RCF interface. /// \param InterfaceT Symbolic name of the interface // TODO: we don't even need InterfaceT parameter here... #define RCF_END( InterfaceT ) \ }; // RCF_METHOD_R0 /// Defines a member function of an interface, having non-void return type and no arguments. /// \param R Return type. /// \param func Function name. #define RCF_METHOD_R0(R,func) RCF_METHOD_R0_(R,func, RCF_MAKE_UNIQUE_ID(func, R0)) #define RCF_METHOD_R0_(R, func, id) \ public: \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ R func() \ { \ return func(getClientStub().getDefaultCallingSemantics()); \ } \ R func(RCF::RemoteCallSemantics rcs) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ return ::RCF::ClientMarshal_R0< R >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ RCF_UNUSED_VARIABLE(in); \ ::RCF::IDL::OutReturnValue< R >(out, t.func()); \ } // RCF_METHOD_R1 /// Defines a member function of an interface, having non-void return type and one argument. /// \param R Return type. /// \param func Function name. /// \param A1 Type of first argument. #define RCF_METHOD_R1(R,func,A1) RCF_METHOD_R1_(R,func,A1, RCF_MAKE_UNIQUE_ID(func, R1)) #define RCF_METHOD_R1_(R,func,A1,id) \ public: \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ R func(A1 a1) \ { \ return func(getClientStub().getDefaultCallingSemantics(), a1); \ } \ R func(::RCF::RemoteCallSemantics rcs, A1 a1) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ return ::RCF::ClientMarshal_R1()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::OutReturnValue< R >(out, t.func(arg1.get())); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ } // RCF_METHOD_R2 /// Defines a member function of an interface, having non-void return type and two arguments. /// \param R Return type. /// \param func Function name. /// \param A1 Type of first argument. /// \param A2 Type of second argument. #define RCF_METHOD_R2(R,func,A1,A2) RCF_METHOD_R2_(R,func,A1,A2, RCF_MAKE_UNIQUE_ID(func, R2)) #define RCF_METHOD_R2_(R,func,A1,A2,id) \ public: \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ R func(A1 a1, A2 a2) \ { \ return func(getClientStub().getDefaultCallingSemantics(), a1, a2); \ } \ R func(::RCF::RemoteCallSemantics rcs, A1 a1, A2 a2) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ return ::RCF::ClientMarshal_R2< R,A1,A2 >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1, a2); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::InParameter< A2 >::type arg2(in); \ ::RCF::IDL::OutReturnValue< R >(out, t.func(arg1.get(), arg2.get())); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ ::RCF::IDL::OutParameter< A2 >::type(arg2, out); \ } // RCF_METHOD_R3 /// Defines a member function of an interface, having non-void return type and three arguments. /// \param R Return type. /// \param func Function name. /// \param A1 Type of first argument. /// \param A2 Type of second argument. /// \param A3 Type of third argument. #define RCF_METHOD_R3(R,func,A1,A2,A3) RCF_METHOD_R3_(R,func,A1,A2,A3, RCF_MAKE_UNIQUE_ID(func, R3)) #define RCF_METHOD_R3_(R,func,A1,A2,A3,id) \ public: \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ R func(A1 a1, A2 a2, A3 a3) \ { \ return func(getClientStub().getDefaultCallingSemantics(), a1, a2, a3); \ } \ R func(::RCF::RemoteCallSemantics rcs, A1 a1, A2 a2, A3 a3) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ return ::RCF::ClientMarshal_R3< R,A1,A2,A3 >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1, a2, a3); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::InParameter< A2 >::type arg2(in); \ ::RCF::IDL::InParameter< A3 >::type arg3(in); \ ::RCF::IDL::OutReturnValue< R >(out, t.func(arg1.get(), arg2.get(), arg3.get())); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ ::RCF::IDL::OutParameter< A2 >::type(arg2, out); \ ::RCF::IDL::OutParameter< A3 >::type(arg3, out); \ } // RCF_METHOD_R4 /// Defines a member function of an interface, having non-void return type and four arguments. /// \param R Return type. /// \param func Function name. /// \param A1 Type of first argument. /// \param A2 Type of second argument. /// \param A3 Type of third argument. /// \param A4 Type of fourth argument. #define RCF_METHOD_R4(R,func,A1,A2,A3,A4) RCF_METHOD_R4_(R,func,A1,A2,A3,A4, RCF_MAKE_UNIQUE_ID(func, R4)) #define RCF_METHOD_R4_(R,func,A1,A2,A3,A4,id) \ public: \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ R func(A1 a1, A2 a2, A3 a3, A4 a4) \ { \ return func(getClientStub().getDefaultCallingSemantics(), a1, a2, a3, a4); \ } \ R func(::RCF::RemoteCallSemantics rcs, A1 a1, A2 a2, A3 a3, A4 a4 ) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ return ::RCF::ClientMarshal_R4< R,A1,A2,A3,A4 >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1, a2, a3, a4); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::InParameter< A2 >::type arg2(in); \ ::RCF::IDL::InParameter< A3 >::type arg3(in); \ ::RCF::IDL::InParameter< A4 >::type arg4(in); \ ::RCF::IDL::OutReturnValue< R >(out, t.func(arg1.get(), arg2.get(), arg3.get(), arg4.get())); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ ::RCF::IDL::OutParameter< A2 >::type(arg2, out); \ ::RCF::IDL::OutParameter< A3 >::type(arg3, out); \ ::RCF::IDL::OutParameter< A4 >::type(arg4, out); \ } // RCF_METHOD_R5 /// Defines a member function of an interface, having non-void return type and five arguments. /// \param R Return type. /// \param func Function name. /// \param A1 Type of first argument. /// \param A2 Type of second argument. /// \param A3 Type of third argument. /// \param A4 Type of fourth argument. /// \param A5 Type of fifth argument. #define RCF_METHOD_R5(R,func,A1,A2,A3,A4,A5) RCF_METHOD_R5_(R,func,A1,A2,A3,A4,A5, RCF_MAKE_UNIQUE_ID(func, R5)) #define RCF_METHOD_R5_(R,func,A1,A2,A3,A4,A5, id) \ public: \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ R func(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) \ { \ return func(getClientStub().getDefaultCallingSemantics(), a1, a2, a3, a4, a5); \ } \ R func(::RCF::RemoteCallSemantics rcs, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ return ::RCF::ClientMarshal_R5< R,A1,A2,A3,A4,A5 >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1, a2, a3, a4, a5); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::InParameter< A2 >::type arg2(in); \ ::RCF::IDL::InParameter< A3 >::type arg3(in); \ ::RCF::IDL::InParameter< A4 >::type arg4(in); \ ::RCF::IDL::InParameter< A5 >::type arg5(in); \ ::RCF::IDL::OutReturnValue< R >(out, t.func(arg1.get(), arg2.get(), arg3.get(), arg4.get(), arg5.get())); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ ::RCF::IDL::OutParameter< A2 >::type(arg2, out); \ ::RCF::IDL::OutParameter< A3 >::type(arg3, out); \ ::RCF::IDL::OutParameter< A4 >::type(arg4, out); \ ::RCF::IDL::OutParameter< A5 >::type(arg5, out); \ } // RCF_METHOD_R6 /// Defines a member function of an interface, having non-void return type and six arguments. /// \param R Return type. /// \param func Function name. /// \param A1 Type of first argument. /// \param A2 Type of second argument. /// \param A3 Type of third argument. /// \param A4 Type of fourth argument. /// \param A5 Type of fifth argument. /// \param A6 Type of sixth argument. #define RCF_METHOD_R6(R,func,A1,A2,A3,A4,A5,A6) RCF_METHOD_R6_(R,func,A1,A2,A3,A4,A5,A6, RCF_MAKE_UNIQUE_ID(func, R6)) #define RCF_METHOD_R6_(R,func,A1,A2,A3,A4,A5,A6, id) \ public: \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ R func(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) \ { \ return func(getClientStub().getDefaultCallingSemantics(), a1, a2, a3, a4, a5, a6); \ } \ R func(::RCF::RemoteCallSemantics rcs, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ return ::RCF::ClientMarshal_R6< R,A1,A2,A3,A4,A5,A6 >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1, a2, a3, a4, a5, a6); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::InParameter< A2 >::type arg2(in); \ ::RCF::IDL::InParameter< A3 >::type arg3(in); \ ::RCF::IDL::InParameter< A4 >::type arg4(in); \ ::RCF::IDL::InParameter< A5 >::type arg5(in); \ ::RCF::IDL::InParameter< A6 >::type arg6(in); \ ::RCF::IDL::OutReturnValue< R >(out, t.func(arg1.get(), arg2.get(), arg3.get(), arg4.get(), arg5.get(), arg6.get())); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ ::RCF::IDL::OutParameter< A2 >::type(arg2, out); \ ::RCF::IDL::OutParameter< A3 >::type(arg3, out); \ ::RCF::IDL::OutParameter< A4 >::type(arg4, out); \ ::RCF::IDL::OutParameter< A5 >::type(arg5, out); \ ::RCF::IDL::OutParameter< A6 >::type(arg6, out); \ } // RCF_METHOD_R7 /// Defines a member function of an interface, having non-void return type and seven arguments. /// \param R Return type. /// \param func Function name. /// \param A1 Type of first argument. /// \param A2 Type of second argument. /// \param A3 Type of third argument. /// \param A4 Type of fourth argument. /// \param A5 Type of fifth argument. /// \param A6 Type of fifth argument. /// \param A7 Type of fifth argument. #define RCF_METHOD_R7(R,func,A1,A2,A3,A4,A5,A6,A7) RCF_METHOD_R7_(R,func,A1,A2,A3,A4,A5,A6,A7, RCF_MAKE_UNIQUE_ID(func, R7)) #define RCF_METHOD_R7_(R,func,A1,A2,A3,A4,A5,A6,A7, id) \ public: \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ R func(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) \ { \ return func(getClientStub().getDefaultCallingSemantics(), a1, a2, a3, a4, a5, a6, a7); \ } \ R func(::RCF::RemoteCallSemantics rcs, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ return ::RCF::ClientMarshal_R7< R,A1,A2,A3,A4,A5,A6,A7 >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1, a2, a3, a4, a5, a6, a7); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::InParameter< A2 >::type arg2(in); \ ::RCF::IDL::InParameter< A3 >::type arg3(in); \ ::RCF::IDL::InParameter< A4 >::type arg4(in); \ ::RCF::IDL::InParameter< A5 >::type arg5(in); \ ::RCF::IDL::InParameter< A6 >::type arg6(in); \ ::RCF::IDL::InParameter< A7 >::type arg7(in); \ ::RCF::IDL::OutReturnValue< R >(out, t.func(arg1.get(), arg2.get(), arg3.get(), arg4.get(), arg5.get(), arg6.get(), arg7.get())); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ ::RCF::IDL::OutParameter< A2 >::type(arg2, out); \ ::RCF::IDL::OutParameter< A3 >::type(arg3, out); \ ::RCF::IDL::OutParameter< A4 >::type(arg4, out); \ ::RCF::IDL::OutParameter< A5 >::type(arg5, out); \ ::RCF::IDL::OutParameter< A6 >::type(arg6, out); \ ::RCF::IDL::OutParameter< A7 >::type(arg7, out); \ } // RCF_METHOD_R8 /// Defines a member function of an interface, having non-void return type and eight arguments. /// \param R Return type. /// \param func Function name. /// \param A1 Type of first argument. /// \param A2 Type of second argument. /// \param A3 Type of third argument. /// \param A4 Type of fourth argument. /// \param A5 Type of fifth argument. /// \param A6 Type of sixth argument. /// \param A7 Type of seventh argument. /// \param A8 Type of eighth argument. #define RCF_METHOD_R8(R,func,A1,A2,A3,A4,A5,A6,A7,A8) RCF_METHOD_R8_(R,func,A1,A2,A3,A4,A5,A6,A7,A8, RCF_MAKE_UNIQUE_ID(func, R8)) #define RCF_METHOD_R8_(R,func,A1,A2,A3,A4,A5,A6,A7,A8, id) \ public: \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ R func(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) \ { \ return func(getClientStub().getDefaultCallingSemantics(), a1, a2, a3, a4, a5, a6, a7, a8); \ } \ R func(::RCF::RemoteCallSemantics rcs, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ return ::RCF::ClientMarshal_R8< R,A1,A2,A3,A4,A5,A6,A7,A8 >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1, a2, a3, a4, a5, a6, a7, a8); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::InParameter< A2 >::type arg2(in); \ ::RCF::IDL::InParameter< A3 >::type arg3(in); \ ::RCF::IDL::InParameter< A4 >::type arg4(in); \ ::RCF::IDL::InParameter< A5 >::type arg5(in); \ ::RCF::IDL::InParameter< A6 >::type arg6(in); \ ::RCF::IDL::InParameter< A7 >::type arg7(in); \ ::RCF::IDL::InParameter< A8 >::type arg8(in); \ ::RCF::IDL::OutReturnValue< R >(out, t.func(arg1.get(), arg2.get(), arg3.get(), arg4.get(), arg5.get(), arg6.get(), arg7.get(), arg8.get())); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ ::RCF::IDL::OutParameter< A2 >::type(arg2, out); \ ::RCF::IDL::OutParameter< A3 >::type(arg3, out); \ ::RCF::IDL::OutParameter< A4 >::type(arg4, out); \ ::RCF::IDL::OutParameter< A5 >::type(arg5, out); \ ::RCF::IDL::OutParameter< A6 >::type(arg6, out); \ ::RCF::IDL::OutParameter< A7 >::type(arg7, out); \ ::RCF::IDL::OutParameter< A8 >::type(arg8, out); \ } // RCF_METHOD_V0 /// Defines a member function of an interface, having void return type and no arguments. /// \param R Return type - must be void. /// \param func Function name. #define RCF_METHOD_V0(R,func) RCF_METHOD_V0_(R,func, RCF_MAKE_UNIQUE_ID(func, V0)) #define RCF_METHOD_V0_(R,func, id) \ public: \ BOOST_STATIC_ASSERT(( boost::is_same::value )); \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ void func() \ { \ func(getClientStub().getDefaultCallingSemantics()); \ } \ void func(::RCF::RemoteCallSemantics rcs) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ ::RCF::ClientMarshal_R0< RCF::Void>()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ RCF_UNUSED_VARIABLE(in); \ ::RCF::IDL::OutReturnValue<>(out, (t.func(), 0)); \ } // RCF_METHOD_V1 /// Defines a member function of an interface, having void return type and one argument. /// \param R Return type - must be void /// \param func Function name. /// \param A1 Type of first argument. #define RCF_METHOD_V1(R,func,A1) RCF_METHOD_V1_(R,func,A1, RCF_MAKE_UNIQUE_ID(func, V1)) #define RCF_METHOD_V1_(R,func,A1, id) \ public: \ BOOST_STATIC_ASSERT(( boost::is_same::value )); \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ void func(A1 a1) \ { \ func(getClientStub().getDefaultCallingSemantics(), a1); \ } \ void func(::RCF::RemoteCallSemantics rcs, A1 a1) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ ::RCF::ClientMarshal_R1< RCF::Void, A1 >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::OutReturnValue<>(out, (t.func(arg1.get()), 0)); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ } // RCF_METHOD_V2 /// Defines a member function of an interface, having void return type and two arguments. /// \param R Return type - must be void. /// \param func Function name. /// \param A1 Type of first argument. /// \param A2 Type of second argument. #define RCF_METHOD_V2(R,func,A1,A2) RCF_METHOD_V2_(R,func,A1,A2, RCF_MAKE_UNIQUE_ID(func, V2)) #define RCF_METHOD_V2_(R,func,A1,A2, id) \ public: \ BOOST_STATIC_ASSERT(( boost::is_same::value )); \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ void func(A1 a1, A2 a2) \ { \ func(getClientStub().getDefaultCallingSemantics(), a1, a2); \ } \ void func(::RCF::RemoteCallSemantics rcs, A1 a1, A2 a2) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ ::RCF::ClientMarshal_R2< RCF::Void, A1, A2 >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1, a2); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::InParameter< A2 >::type arg2(in); \ ::RCF::IDL::OutReturnValue<>(out, (t.func(arg1.get(), arg2.get()), 0)); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ ::RCF::IDL::OutParameter< A2 >::type(arg2, out); \ } // RCF_METHOD_V3 /// Defines a member function of an interface, having void return type and three arguments. /// \param R Return type - must be void. /// \param func Function name. /// \param A1 Type of first argument. /// \param A2 Type of second argument. /// \param A3 Type of third argument. #define RCF_METHOD_V3(R,func,A1,A2,A3) RCF_METHOD_V3_(R,func,A1,A2,A3, RCF_MAKE_UNIQUE_ID(func, V3)) #define RCF_METHOD_V3_(R,func,A1,A2,A3, id) \ public: \ BOOST_STATIC_ASSERT(( boost::is_same::value )); \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ void func(A1 a1, A2 a2, A3 a3) \ { \ func(getClientStub().getDefaultCallingSemantics(), a1, a2, a3); \ } \ void func(::RCF::RemoteCallSemantics rcs, A1 a1, A2 a2, A3 a3) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ ::RCF::ClientMarshal_R3< RCF::Void, A1, A2, A3 >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1, a2, a3); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::InParameter< A2 >::type arg2(in); \ ::RCF::IDL::InParameter< A3 >::type arg3(in); \ ::RCF::IDL::OutReturnValue<>(out, (t.func(arg1.get(), arg2.get(), arg3.get()), 0)); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ ::RCF::IDL::OutParameter< A2 >::type(arg2, out); \ ::RCF::IDL::OutParameter< A3 >::type(arg3, out); \ } // RCF_METHOD_V4 /// Defines a member function of an interface, having void return type and four arguments. /// \param R Return type - must be void. /// \param func Function name. /// \param A1 Type of first argument. /// \param A2 Type of second argument. /// \param A3 Type of third argument. /// \param A4 Type of fourth argument. #define RCF_METHOD_V4(R,func,A1,A2,A3,A4) RCF_METHOD_V4_(R,func,A1,A2,A3,A4, RCF_MAKE_UNIQUE_ID(func, V4)) #define RCF_METHOD_V4_(R,func,A1,A2,A3,A4, id) \ public: \ BOOST_STATIC_ASSERT(( boost::is_same::value )); \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ void func(A1 a1, A2 a2, A3 a3, A4 a4) \ { \ func(getClientStub().getDefaultCallingSemantics(), a1, a2, a3, a4); \ } \ void func(::RCF::RemoteCallSemantics rcs, A1 a1, A2 a2, A3 a3, A4 a4) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ ::RCF::ClientMarshal_R4< RCF::Void, A1, A2, A3, A4 >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1, a2, a3, a4); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::InParameter< A2 >::type arg2(in); \ ::RCF::IDL::InParameter< A3 >::type arg3(in); \ ::RCF::IDL::InParameter< A4 >::type arg4(in); \ ::RCF::IDL::OutReturnValue<>(out, (t.func(arg1.get(), arg2.get(), arg3.get(), arg4.get()), 0)); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ ::RCF::IDL::OutParameter< A2 >::type(arg2, out); \ ::RCF::IDL::OutParameter< A3 >::type(arg3, out); \ ::RCF::IDL::OutParameter< A4 >::type(arg4, out); \ } // RCF_METHOD_V5 /// Defines a member function of an interface, having void return type and five arguments. /// \param R Return type - must be void. /// \param func Function name. /// \param A1 Type of first argument. /// \param A2 Type of second argument. /// \param A3 Type of third argument. /// \param A4 Type of fourth argument. /// \param A5 Type of fifth argument. #define RCF_METHOD_V5(R,func,A1,A2,A3,A4,A5) RCF_METHOD_V5_(R,func,A1,A2,A3,A4,A5, RCF_MAKE_UNIQUE_ID(func, V5)) #define RCF_METHOD_V5_(R,func,A1,A2,A3,A4,A5, id) \ public: \ BOOST_STATIC_ASSERT(( boost::is_same::value )); \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ void func(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) \ { \ func(getClientStub().getDefaultCallingSemantics(), a1, a2, a3, a4, a5); \ } \ void func(::RCF::RemoteCallSemantics rcs, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ ::RCF::ClientMarshal_R5< RCF::Void, A1, A2, A3, A4, A5 >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1, a2, a3, a4, a5); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::InParameter< A2 >::type arg2(in); \ ::RCF::IDL::InParameter< A3 >::type arg3(in); \ ::RCF::IDL::InParameter< A4 >::type arg4(in); \ ::RCF::IDL::InParameter< A5 >::type arg5(in); \ ::RCF::IDL::OutReturnValue<>(out, (t.func(arg1.get(), arg2.get(), arg3.get(), arg4.get(), arg5.get()), 0)); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ ::RCF::IDL::OutParameter< A2 >::type(arg2, out); \ ::RCF::IDL::OutParameter< A3 >::type(arg3, out); \ ::RCF::IDL::OutParameter< A4 >::type(arg4, out); \ ::RCF::IDL::OutParameter< A5 >::type(arg5, out); \ } // RCF_METHOD_V6 /// Defines a member function of an interface, having void return type and six arguments. /// \param R Return type - must be void. /// \param func Function name. /// \param A1 Type of first argument. /// \param A2 Type of second argument. /// \param A3 Type of third argument. /// \param A4 Type of fourth argument. /// \param A5 Type of fifth argument. /// \param A6 Type of sixth argument. #define RCF_METHOD_V6(R,func,A1,A2,A3,A4,A5,A6) RCF_METHOD_V6_(R,func,A1,A2,A3,A4,A5,A6, RCF_MAKE_UNIQUE_ID(func, V6)) #define RCF_METHOD_V6_(R,func,A1,A2,A3,A4,A5,A6, id) \ public: \ BOOST_STATIC_ASSERT(( boost::is_same::value )); \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ void func(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) \ { \ func(getClientStub().getDefaultCallingSemantics(), a1, a2, a3, a4, a5, a6); \ } \ void func(::RCF::RemoteCallSemantics rcs, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ ::RCF::ClientMarshal_R6< RCF::Void, A1, A2, A3, A4, A5, A6 >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1, a2, a3, a4, a5, a6); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::InParameter< A2 >::type arg2(in); \ ::RCF::IDL::InParameter< A3 >::type arg3(in); \ ::RCF::IDL::InParameter< A4 >::type arg4(in); \ ::RCF::IDL::InParameter< A5 >::type arg5(in); \ ::RCF::IDL::InParameter< A6 >::type arg6(in); \ ::RCF::IDL::OutReturnValue<>(out, (t.func(arg1.get(), arg2.get(), arg3.get(), arg4.get(), arg5.get(), arg6.get()), 0)); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ ::RCF::IDL::OutParameter< A2 >::type(arg2, out); \ ::RCF::IDL::OutParameter< A3 >::type(arg3, out); \ ::RCF::IDL::OutParameter< A4 >::type(arg4, out); \ ::RCF::IDL::OutParameter< A5 >::type(arg5, out); \ ::RCF::IDL::OutParameter< A6 >::type(arg6, out); \ } // RCF_METHOD_V7 /// Defines a member function of an interface, having void return type and seven arguments. /// \param R Return type - must be void. /// \param func Function name. /// \param A1 Type of first argument. /// \param A2 Type of second argument. /// \param A3 Type of third argument. /// \param A4 Type of fourth argument. /// \param A5 Type of fifth argument. /// \param A6 Type of sixth argument. /// \param A7 Type of seventh argument. #define RCF_METHOD_V7(R,func,A1,A2,A3,A4,A5,A6,A7) RCF_METHOD_V7_(R,func,A1,A2,A3,A4,A5,A6,A7, RCF_MAKE_UNIQUE_ID(func, V7)) #define RCF_METHOD_V7_(R,func,A1,A2,A3,A4,A5,A6,A7, id) \ public: \ BOOST_STATIC_ASSERT(( boost::is_same::value )); \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ void func(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) \ { \ func(getClientStub().getDefaultCallingSemantics(), a1, a2, a3, a4, a5, a6, a7); \ } \ void func(::RCF::RemoteCallSemantics rcs, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ ::RCF::ClientMarshal_R7< RCF::Void, A1, A2, A3, A4, A5, A6, A7 >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1, a2, a3, a4, a5, a6, a7); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::InParameter< A2 >::type arg2(in); \ ::RCF::IDL::InParameter< A3 >::type arg3(in); \ ::RCF::IDL::InParameter< A4 >::type arg4(in); \ ::RCF::IDL::InParameter< A5 >::type arg5(in); \ ::RCF::IDL::InParameter< A6 >::type arg6(in); \ ::RCF::IDL::InParameter< A7 >::type arg7(in); \ ::RCF::IDL::OutReturnValue<>(out, (t.func(arg1.get(), arg2.get(), arg3.get(), arg4.get(), arg5.get(), arg6.get(), arg7.get()), 0)); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ ::RCF::IDL::OutParameter< A2 >::type(arg2, out); \ ::RCF::IDL::OutParameter< A3 >::type(arg3, out); \ ::RCF::IDL::OutParameter< A4 >::type(arg4, out); \ ::RCF::IDL::OutParameter< A5 >::type(arg5, out); \ ::RCF::IDL::OutParameter< A6 >::type(arg6, out); \ ::RCF::IDL::OutParameter< A7 >::type(arg7, out); \ } // RCF_METHOD_V8 /// Defines a member function of an interface, having void return type and eight arguments. /// \param R Return type - must be void. /// \param func Function name. /// \param A1 Type of first argument. /// \param A2 Type of second argument. /// \param A3 Type of third argument. /// \param A4 Type of fourth argument. /// \param A5 Type of fifth argument. /// \param A6 Type of sixth argument. /// \param A7 Type of seventh argument. /// \param A8 Type of eighth argument. #define RCF_METHOD_V8(R,func,A1,A2,A3,A4,A5,A6,A7,A8) RCF_METHOD_V8_(R,func,A1,A2,A3,A4,A5,A6,A7,A8, RCF_MAKE_UNIQUE_ID(func, V8)) #define RCF_METHOD_V8_(R,func,A1,A2,A3,A4,A5,A6,A7,A8, id) \ public: \ BOOST_STATIC_ASSERT(( boost::is_same::value )); \ RCF_MAKE_NEXT_DISPATCH_ID(id); \ void func(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) \ { \ func(getClientStub().getDefaultCallingSemantics(), a1, a2, a3, a4, a5, a6, a7, a8); \ } \ void func(::RCF::RemoteCallSemantics rcs, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) \ { \ ::RCF::CurrentClientStubPtrSentry sentry(mClientStubPtr); \ ::RCF::ClientMarshal_R8< RCF::Void, A1, A2, A3, A4, A5, A6, A7, A8 >()( \ getClientStub(), \ rcs, \ ::RCF::getInterfaceName( (Interface *) NULL), \ id::value, \ a1, a2, a3, a4, a5, a6, a7, a8); \ } \ \ private: \ template \ void invoke( \ const id &, \ ::RCF::SerializationProtocolIn &in, \ ::RCF::SerializationProtocolOut &out, \ T &t) \ { \ ::RCF::IDL::InParameter< A1 >::type arg1(in); \ ::RCF::IDL::InParameter< A2 >::type arg2(in); \ ::RCF::IDL::InParameter< A3 >::type arg3(in); \ ::RCF::IDL::InParameter< A4 >::type arg4(in); \ ::RCF::IDL::InParameter< A5 >::type arg5(in); \ ::RCF::IDL::InParameter< A6 >::type arg6(in); \ ::RCF::IDL::InParameter< A7 >::type arg7(in); \ ::RCF::IDL::InParameter< A8 >::type arg8(in); \ ::RCF::IDL::OutReturnValue<>(out, (t.func(arg1.get(), arg2.get(), arg3.get(), arg4.get(), arg5.get(), arg6.get(), arg7.get(), arg8.get()), 0)); \ ::RCF::IDL::OutParameter< A1 >::type(arg1, out); \ ::RCF::IDL::OutParameter< A2 >::type(arg2, out); \ ::RCF::IDL::OutParameter< A3 >::type(arg3, out); \ ::RCF::IDL::OutParameter< A4 >::type(arg4, out); \ ::RCF::IDL::OutParameter< A5 >::type(arg5, out); \ ::RCF::IDL::OutParameter< A6 >::type(arg6, out); \ ::RCF::IDL::OutParameter< A7 >::type(arg7, out); \ ::RCF::IDL::OutParameter< A8 >::type(arg8, out); \ } // RCF_MAKE_UNIQUE_ID BOOST_STATIC_ASSERT( sizeof(RCF::defined_) != sizeof(RCF::default_)); #define RCF_MAKE_UNIQUE_ID(func, sig) RCF_MAKE_UNIQUE_ID_(func, sig, __LINE__) #define RCF_MAKE_UNIQUE_ID_(func, sig, __LINE__) RCF_MAKE_UNIQUE_ID__(func, sig, __LINE__) #define RCF_MAKE_UNIQUE_ID__(func, sig, Line) rcf_unique_id_##func##_##sig##_##Line #define RCF_MAKE_NEXT_DISPATCH_ID(next_dispatch_id) \ typedef \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_< 0> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_< 1> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_< 2> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_< 3> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_< 4> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_< 5> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_< 6> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_< 7> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_< 8> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_< 9> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<10> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<11> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<12> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<13> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<14> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<15> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<16> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<17> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<18> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<19> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<20> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<21> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<22> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<23> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<24> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<25> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<26> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<27> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<28> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<29> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<30> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<31> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<32> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<33> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::if_< boost::mpl::bool_< (sizeof(RCF_make_next_dispatch_id_func((DummyThisT *) 0, (ThisT *) 0, (boost::mpl::int_<34> *) 0)) == sizeof(RCF::defined_)) >, \ boost::mpl::int_<35>, \ boost::mpl::int_<34> >::type, \ boost::mpl::int_<33> >::type, \ boost::mpl::int_<32> >::type, \ boost::mpl::int_<31> >::type, \ boost::mpl::int_<30> >::type, \ boost::mpl::int_<29> >::type, \ boost::mpl::int_<28> >::type, \ boost::mpl::int_<27> >::type, \ boost::mpl::int_<26> >::type, \ boost::mpl::int_<25> >::type, \ boost::mpl::int_<24> >::type, \ boost::mpl::int_<23> >::type, \ boost::mpl::int_<22> >::type, \ boost::mpl::int_<21> >::type, \ boost::mpl::int_<20> >::type, \ boost::mpl::int_<19> >::type, \ boost::mpl::int_<18> >::type, \ boost::mpl::int_<17> >::type, \ boost::mpl::int_<16> >::type, \ boost::mpl::int_<15> >::type, \ boost::mpl::int_<14> >::type, \ boost::mpl::int_<13> >::type, \ boost::mpl::int_<12> >::type, \ boost::mpl::int_<11> >::type, \ boost::mpl::int_<10> >::type, \ boost::mpl::int_< 9> >::type, \ boost::mpl::int_< 8> >::type, \ boost::mpl::int_< 7> >::type, \ boost::mpl::int_< 6> >::type, \ boost::mpl::int_< 5> >::type, \ boost::mpl::int_< 4> >::type, \ boost::mpl::int_< 3> >::type, \ boost::mpl::int_< 2> >::type, \ boost::mpl::int_< 1> >::type, \ boost::mpl::int_< 0> >::type next_dispatch_id; \ friend RCF::defined_ RCF_make_next_dispatch_id_func(DummyThisT *, ThisT *, next_dispatch_id *) #endif // ! INCLUDE_RCF_IDL_HPP