diff options
author | Jose <jose@zeroc.com> | 2015-12-10 13:45:05 +0100 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2015-12-10 13:45:05 +0100 |
commit | 71db92210dc268134c9eceec659ed8ea6a0e427e (patch) | |
tree | 65fc80541483102a1ab9acda1c28c781a03f7e67 /cpp/src/Ice/Initialize.cpp | |
parent | C++11 mapping server side input parameter fixes (diff) | |
download | ice-71db92210dc268134c9eceec659ed8ea6a0e427e.tar.bz2 ice-71db92210dc268134c9eceec659ed8ea6a0e427e.tar.xz ice-71db92210dc268134c9eceec659ed8ea6a0e427e.zip |
C++11 mapping adding CommunicatorHolder
Diffstat (limited to 'cpp/src/Ice/Initialize.cpp')
-rw-r--r-- | cpp/src/Ice/Initialize.cpp | 56 |
1 files changed, 52 insertions, 4 deletions
diff --git a/cpp/src/Ice/Initialize.cpp b/cpp/src/Ice/Initialize.cpp index 66d8db8315a..e88b339696c 100644 --- a/cpp/src/Ice/Initialize.cpp +++ b/cpp/src/Ice/Initialize.cpp @@ -208,7 +208,43 @@ inline void checkIceVersion(Int version) } -CommunicatorPtr +#ifdef ICE_CPP11_MAPPING + +Ice::CommunicatorHolder::CommunicatorHolder(shared_ptr<Ice::Communicator>&& communicator) : + _communicator(move(communicator)) +{ +} + +Ice::CommunicatorHolder::~CommunicatorHolder() +{ + if(_communicator) + { + _communicator->destroy(); + } +} + +const shared_ptr<Ice::Communicator>& +Ice::CommunicatorHolder::communicator() const +{ + return _communicator; +} + +shared_ptr<Ice::Communicator> +Ice::CommunicatorHolder::release() +{ + return move(_communicator); +} + +const shared_ptr<Ice::Communicator>& +Ice::CommunicatorHolder::operator->() const +{ + return _communicator; +} +#endif + + + +ICE_COMMUNICATOR_HOLDER Ice::initialize(int& argc, char* argv[], const InitializationData& initializationData, Int version) { checkIceVersion(version); @@ -218,19 +254,27 @@ Ice::initialize(int& argc, char* argv[], const InitializationData& initializatio CommunicatorIPtr communicator = CommunicatorI::create(initData); communicator->finishSetup(argc, argv); +#ifdef ICE_CPP11_MAPPING + return CommunicatorHolder(move(communicator)); +#else return communicator; +#endif } -CommunicatorPtr +ICE_COMMUNICATOR_HOLDER Ice::initialize(StringSeq& args, const InitializationData& initializationData, Int version) { IceUtilInternal::ArgVector av(args); - CommunicatorPtr communicator = initialize(av.argc, av.argv, initializationData, version); + ICE_COMMUNICATOR_HOLDER communicator = initialize(av.argc, av.argv, initializationData, version); args = argsToStringSeq(av.argc, av.argv); +#ifdef ICE_CPP11_MAPPING + return move(communicator); +#else return communicator; +#endif } -CommunicatorPtr +ICE_COMMUNICATOR_HOLDER Ice::initialize(const InitializationData& initData, Int version) { // @@ -243,7 +287,11 @@ Ice::initialize(const InitializationData& initData, Int version) int argc = 0; char* argv[] = { 0 }; communicator->finishSetup(argc, argv); +#ifdef ICE_CPP11_MAPPING + return CommunicatorHolder(move(communicator)); +#else return communicator; +#endif } #ifndef ICE_CPP11_MAPPING |