//****************************************************************************** // 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_STUBFACTORY_HPP #define INCLUDE_RCF_STUBFACTORY_HPP #include #include #include namespace RCF { class I_RcfClient; typedef boost::shared_ptr RcfClientPtr; class I_StubFactory { public: virtual ~I_StubFactory() {} virtual RcfClientPtr makeServerStub() = 0; }; template class StubFactory_1 : public I_StubFactory { public: RcfClientPtr makeServerStub() { boost::shared_ptr tPtr( new T ); boost::shared_ptr< RCF::I_Deref > derefPtr( new RCF::DerefSharedPtr(tPtr) ); RcfClientPtr rcfClientPtr = createServerStub( (I1 *) NULL, (T *) NULL, derefPtr); return rcfClientPtr; } }; template class StubFactory_2 : public I_StubFactory { public: RcfClientPtr makeServerStub() { boost::shared_ptr tPtr( new T ); boost::shared_ptr< RCF::I_Deref > derefPtr( new RCF::DerefSharedPtr(tPtr) ); RcfClientPtr rcfClientPtr = createServerStub( (I1 *) NULL, (T *) NULL, derefPtr); { RcfClientPtr mergeePtr = createServerStub( (I2 *) 0, (T *) 0, derefPtr); rcfClientPtr->getServerStub().merge(mergeePtr); } return rcfClientPtr; } }; template class StubFactory_3 : public I_StubFactory { public: RcfClientPtr makeServerStub() { boost::shared_ptr tPtr( new T ); boost::shared_ptr< RCF::I_Deref > derefPtr( new RCF::DerefSharedPtr(tPtr) ); RcfClientPtr rcfClientPtr = createServerStub( (I1 *) NULL, (T *) NULL, derefPtr); { RcfClientPtr mergeePtr = createServerStub( (I2 *) 0, (T *) 0, derefPtr); rcfClientPtr->getServerStub().merge(mergeePtr); } { RcfClientPtr mergeePtr = createServerStub( (I3 *) 0, (T *) 0, derefPtr); rcfClientPtr->getServerStub().merge(mergeePtr); } return rcfClientPtr; } }; template class StubFactory_4 : public I_StubFactory { public: RcfClientPtr makeServerStub() { boost::shared_ptr tPtr( new T ); boost::shared_ptr< RCF::I_Deref > derefPtr( new RCF::DerefSharedPtr(tPtr) ); RcfClientPtr rcfClientPtr = createServerStub( (I1 *) NULL, (T *) NULL, derefPtr); { RcfClientPtr mergeePtr = createServerStub( (I2 *) 0, (T *) 0, derefPtr); rcfClientPtr->getServerStub().merge(mergeePtr); } { RcfClientPtr mergeePtr = createServerStub( (I3 *) 0, (T *) 0, derefPtr); rcfClientPtr->getServerStub().merge(mergeePtr); } { RcfClientPtr mergeePtr = createServerStub( (I4 *) 0, (T *) 0, derefPtr); rcfClientPtr->getServerStub().merge(mergeePtr); } return rcfClientPtr; } }; } // namespace RCF #endif // ! INCLUDE_RCF_STUBFACTORY_HPP