diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/CommunicatorI.cpp | 39 | ||||
-rw-r--r-- | cpp/src/Ice/CommunicatorI.h | 15 | ||||
-rw-r--r-- | cpp/src/Ice/ConnectionI.cpp | 39 | ||||
-rw-r--r-- | cpp/src/Ice/ConnectionI.h | 17 | ||||
-rw-r--r-- | cpp/src/Ice/Initialize.cpp | 24 | ||||
-rw-r--r-- | cpp/src/Ice/OutgoingAsync.cpp | 49 | ||||
-rw-r--r-- | cpp/src/Ice/Proxy.cpp | 293 | ||||
-rw-r--r-- | cpp/src/slice2cpp/Gen.cpp | 4 |
8 files changed, 456 insertions, 24 deletions
diff --git a/cpp/src/Ice/CommunicatorI.cpp b/cpp/src/Ice/CommunicatorI.cpp index 2af374c1fb5..8bc80d47363 100644 --- a/cpp/src/Ice/CommunicatorI.cpp +++ b/cpp/src/Ice/CommunicatorI.cpp @@ -222,6 +222,45 @@ Ice::CommunicatorI::begin_flushBatchRequests(const Callback_Communicator_flushBa return __begin_flushBatchRequests(cb, cookie); } +#ifdef ICE_CPP11 +AsyncResultPtr +Ice::CommunicatorI::begin_flushBatchRequests( + const IceInternal::Function<void (const Exception&)>& exception, + const IceInternal::Function<void (bool)>& sent) +{ + class Cpp11CB : public IceInternal::Cpp11FnCallbackNC + { + + public: + + Cpp11CB(const IceInternal::Function<void (const Exception&)>& excb, + const IceInternal::Function<void (bool)>& sentcb) : + IceInternal::Cpp11FnCallbackNC(excb, sentcb) + { + CallbackBase::checkCallback(true, excb != nullptr); + } + + virtual void + __completed(const AsyncResultPtr& __result) const + { + CommunicatorPtr __com = __result->getCommunicator(); + assert(__com); + try + { + __com->end_flushBatchRequests(__result); + assert(false); + } + catch(const Exception& ex) + { + IceInternal::Cpp11FnCallbackNC::__exception(__result, ex); + } + } + }; + + return __begin_flushBatchRequests(new Cpp11CB(exception, sent), 0); +} +#endif + namespace { diff --git a/cpp/src/Ice/CommunicatorI.h b/cpp/src/Ice/CommunicatorI.h index 8aef1ed13fa..3aa27681465 100644 --- a/cpp/src/Ice/CommunicatorI.h +++ b/cpp/src/Ice/CommunicatorI.h @@ -61,19 +61,16 @@ public: virtual void flushBatchRequests(); -#ifdef ICE_CPP11 - virtual ::Ice::AsyncResultPtr begin_flushBatchRequests( - const ::IceInternal::Function<void (const ::Ice::Exception&)>& exception, - const ::IceInternal::Function<void (bool)>& sent = ::IceInternal::Function<void (bool)>()) - { - return __begin_flushBatchRequests(new Cpp11FnCallbackNC_Communicator_flushBatchRequests(exception, sent), 0); - } -#endif - virtual AsyncResultPtr begin_flushBatchRequests(); virtual AsyncResultPtr begin_flushBatchRequests(const CallbackPtr&, const LocalObjectPtr& = 0); virtual AsyncResultPtr begin_flushBatchRequests(const Callback_Communicator_flushBatchRequestsPtr&, const LocalObjectPtr& = 0); +#ifdef ICE_CPP11 + virtual AsyncResultPtr begin_flushBatchRequests( + const IceInternal::Function<void (const Exception&)>&, + const IceInternal::Function<void (bool)>& = IceInternal::Function<void (bool)>()); +#endif + virtual void end_flushBatchRequests(const AsyncResultPtr&); virtual ObjectPrx getAdmin() const; diff --git a/cpp/src/Ice/ConnectionI.cpp b/cpp/src/Ice/ConnectionI.cpp index d9588b62e89..01f18e6e91f 100644 --- a/cpp/src/Ice/ConnectionI.cpp +++ b/cpp/src/Ice/ConnectionI.cpp @@ -983,6 +983,45 @@ Ice::ConnectionI::begin_flushBatchRequests(const Callback_Connection_flushBatchR return __begin_flushBatchRequests(cb, cookie); } +#ifdef ICE_CPP11 +AsyncResultPtr +Ice::ConnectionI::begin_flushBatchRequests( + const IceInternal::Function<void (const Exception&)>& exception, + const IceInternal::Function<void (bool)>& sent) +{ + + class Cpp11CB : public IceInternal::Cpp11FnCallbackNC + { + public: + + Cpp11CB(const IceInternal::Function<void (const Exception&)>& excb, + const IceInternal::Function<void (bool)>& sentcb) : + IceInternal::Cpp11FnCallbackNC(excb, sentcb) + { + CallbackBase::checkCallback(true, excb != nullptr); + } + + virtual void + __completed(const AsyncResultPtr& __result) const + { + ConnectionPtr __con = __result->getConnection(); + assert(__con); + try + { + __con->end_flushBatchRequests(__result); + assert(false); + } + catch(const Exception& ex) + { + IceInternal::Cpp11FnCallbackNC::__exception(__result, ex); + } + } + }; + + return __begin_flushBatchRequests(new Cpp11CB(exception, sent), 0); +} +#endif + AsyncResultPtr Ice::ConnectionI::__begin_flushBatchRequests(const CallbackBasePtr& cb, const LocalObjectPtr& cookie) { diff --git a/cpp/src/Ice/ConnectionI.h b/cpp/src/Ice/ConnectionI.h index 36200d0aa4d..b7254df51ba 100644 --- a/cpp/src/Ice/ConnectionI.h +++ b/cpp/src/Ice/ConnectionI.h @@ -166,19 +166,16 @@ public: virtual void flushBatchRequests(); // From Connection. -#ifdef ICE_CPP11 - virtual ::Ice::AsyncResultPtr begin_flushBatchRequests( - const ::IceInternal::Function<void (const ::Ice::Exception&)>& exception, - const ::IceInternal::Function<void (bool)>& sent = ::IceInternal::Function<void (bool)>()) - { - return __begin_flushBatchRequests(new Cpp11FnCallbackNC_Connection_flushBatchRequests(exception, sent), 0); - } -#endif - virtual AsyncResultPtr begin_flushBatchRequests(); virtual AsyncResultPtr begin_flushBatchRequests(const CallbackPtr&, const LocalObjectPtr& = 0); virtual AsyncResultPtr begin_flushBatchRequests(const Callback_Connection_flushBatchRequestsPtr&, - const LocalObjectPtr& = 0); + const LocalObjectPtr& = 0); +#ifdef ICE_CPP11 + virtual AsyncResultPtr begin_flushBatchRequests( + const ::IceInternal::Function<void (const ::Ice::Exception&)>&, + const ::IceInternal::Function<void (bool)>& = ::IceInternal::Function<void (bool)>()); +#endif + virtual void end_flushBatchRequests(const AsyncResultPtr&); bool flushBatchRequests(IceInternal::BatchOutgoing*); diff --git a/cpp/src/Ice/Initialize.cpp b/cpp/src/Ice/Initialize.cpp index f4279f7812d..ad0591e4366 100644 --- a/cpp/src/Ice/Initialize.cpp +++ b/cpp/src/Ice/Initialize.cpp @@ -368,9 +368,27 @@ IceInternal::getInstanceTimer(const CommunicatorPtr& communicator) } #ifdef ICE_CPP11 -void -IceInternal::Cpp11Dispatcher::dispatch(const ::Ice::DispatcherCallPtr& call, const ::Ice::ConnectionPtr& conn) +Ice::DispatcherPtr +Ice::newDispatcher(const ::std::function<void (const DispatcherCallPtr&, const ConnectionPtr)>& cb) { - _cb(call, conn); + class Cpp11Dispatcher : public Dispatcher + { + public: + + Cpp11Dispatcher(const ::std::function<void (const DispatcherCallPtr&, const ConnectionPtr)>& cb) : + _cb(cb) + { + } + + virtual void dispatch(const DispatcherCallPtr& call, const ConnectionPtr& conn) + { + _cb(call, conn); + } + + private: + const ::std::function<void (const DispatcherCallPtr&, const ConnectionPtr)> _cb; + }; + + return new Cpp11Dispatcher(cb); } #endif diff --git a/cpp/src/Ice/OutgoingAsync.cpp b/cpp/src/Ice/OutgoingAsync.cpp index e8aadb6fb38..17095659df5 100644 --- a/cpp/src/Ice/OutgoingAsync.cpp +++ b/cpp/src/Ice/OutgoingAsync.cpp @@ -1183,6 +1183,54 @@ public: // CallbackBasePtr IceInternal::__dummyCallback = new DummyCallback; +#ifdef ICE_CPP11 + +Ice::CallbackPtr +Ice::newCallback(const ::IceInternal::Function<void (const AsyncResultPtr&)>& completed, + const ::IceInternal::Function<void (const AsyncResultPtr&)>& sent) +{ + class Cpp11CB : public GenericCallbackBase + { + public: + Cpp11CB(const ::std::function<void (const AsyncResultPtr&)>& completed, + const ::std::function<void (const AsyncResultPtr&)>& sent) : + _completed(completed), + _sent(sent) + { + checkCallback(true, completed != nullptr); + } + + virtual void __completed(const AsyncResultPtr& result) const + { + _completed(result); + } + + virtual CallbackBasePtr __verify(LocalObjectPtr&) + { + return this; // Nothing to do, the cookie is not type-safe. + } + + virtual void __sent(const AsyncResultPtr& result) const + { + if(_sent != nullptr) + { + _sent(result); + } + } + + virtual bool __hasSentCallback() const + { + return _sent != nullptr; + } + + ::std::function< void (const AsyncResultPtr&)> _completed; + ::std::function< void (const AsyncResultPtr&)> _sent; + }; + + return new Cpp11CB(completed, sent); +} +#endif + void Ice::AMICallbackBase::__exception(const ::Ice::Exception& ex) { @@ -1198,3 +1246,4 @@ Ice::AMICallbackBase::__sent(bool sentSynchronously) } } + diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp index d4468b6cb2c..3e9dd5ae420 100644 --- a/cpp/src/Ice/Proxy.cpp +++ b/cpp/src/Ice/Proxy.cpp @@ -71,6 +71,53 @@ IceInternal::checkedCastImpl(const ObjectPrx& b, const string& f, const string& } #ifdef ICE_CPP11 + +IceInternal::Cpp11FnCallbackNC::Cpp11FnCallbackNC(const ::std::function<void (const ::Ice::Exception&)>& excb, + const ::std::function<void (bool)>& sentcb) : + _exception(excb), + _sent(sentcb) +{ +} + +IceInternal::CallbackBasePtr +IceInternal::Cpp11FnCallbackNC::__verify(::Ice::LocalObjectPtr&) +{ + return this; +} + +void +IceInternal::Cpp11FnCallbackNC::__sent(const ::Ice::AsyncResultPtr& result) const +{ + if(_sent != nullptr) + { + _sent(result->sentSynchronously()); + } +} + +bool +IceInternal::Cpp11FnCallbackNC::__hasSentCallback() const +{ + return _sent != nullptr; +} + +void +IceInternal::Cpp11FnCallbackNC::__exception(const ::Ice::AsyncResultPtr&, const ::Ice::Exception& ex) const +{ + if(_exception != nullptr) + { + _exception(ex); + } +} + +IceInternal::Cpp11FnOnewayCallbackNC::Cpp11FnOnewayCallbackNC(const ::std::function<void ()>& cb, + const ::std::function<void (const ::Ice::Exception&)>& excb, + const ::std::function<void (bool)>& sentcb) : + Cpp11FnCallbackNC(excb, sentcb), + _cb(cb) +{ + CallbackBase::checkCallback(true, cb || excb != nullptr); +} + void IceInternal::Cpp11FnOnewayCallbackNC::__completed(const ::Ice::AsyncResultPtr& result) const { @@ -182,6 +229,252 @@ IceProxy::Ice::Object::begin_ice_isA(const string& typeId, return __result; } +#ifdef ICE_CPP11 + +Ice::AsyncResultPtr +IceProxy::Ice::Object::__begin_ice_isA( + const ::std::string& typeId, + const ::Ice::Context* ctx, + const ::IceInternal::Function<void (bool)>& response, + const ::IceInternal::Function<void (const ::Ice::Exception&)>& exception, + const ::IceInternal::Function<void (bool)>& sent) +{ + class Cpp11CB : public ::IceInternal::Cpp11FnCallbackNC + { + public: + + Cpp11CB(const ::std::function<void (bool)>& responseFunc, + const ::std::function<void (const ::Ice::Exception&)>& exceptionFunc, + const ::std::function<void (bool)>& sentFunc) : + ::IceInternal::Cpp11FnCallbackNC(exceptionFunc, sentFunc), + _response(responseFunc) + { + CallbackBase::checkCallback(true, responseFunc || exceptionFunc != nullptr); + } + + virtual void __completed(const ::Ice::AsyncResultPtr& __result) const + { + ::Ice::ObjectPrx __proxy = ::Ice::ObjectPrx::uncheckedCast(__result->getProxy()); + bool __ret; + try + { + __ret = __proxy->end_ice_isA(__result); + } + catch(const ::Ice::Exception& ex) + { + Cpp11FnCallbackNC::__exception(__result, ex); + return; + } + if(_response != nullptr) + { + _response(__ret); + } + } + + private: + + ::std::function<void (bool)> _response; + }; + + return begin_ice_isA(typeId, ctx, new Cpp11CB(response, exception, sent), 0); +} + +Ice::AsyncResultPtr +IceProxy::Ice::Object::__begin_ice_id( + const ::Ice::Context* ctx, + const ::IceInternal::Function<void (const ::std::string&)>& response, + const ::IceInternal::Function<void (const ::Ice::Exception&)>& exception, + const ::IceInternal::Function<void (bool)>& sent) +{ + class Cpp11CB : public ::IceInternal::Cpp11FnCallbackNC + { + public: + + Cpp11CB(const ::std::function<void (const ::std::string&)>& responseFunc, + const ::std::function<void (const ::Ice::Exception&)>& exceptionFunc, + const ::std::function<void (bool)>& sentFunc) : + ::IceInternal::Cpp11FnCallbackNC(exceptionFunc, sentFunc), + _response(responseFunc) + { + CallbackBase::checkCallback(true, responseFunc || exceptionFunc != nullptr); + } + + virtual void __completed(const ::Ice::AsyncResultPtr& __result) const + { + ::Ice::ObjectPrx __proxy = ::Ice::ObjectPrx::uncheckedCast(__result->getProxy()); + ::std::string __ret; + try + { + __ret = __proxy->end_ice_id(__result); + } + catch(const ::Ice::Exception& ex) + { + Cpp11FnCallbackNC::__exception(__result, ex); + return; + } + if(_response != nullptr) + { + _response(__ret); + } + } + + private: + + ::std::function<void (const ::std::string&)> _response; + }; + return begin_ice_id(ctx, new Cpp11CB(response, exception, sent), 0); +} + +Ice::AsyncResultPtr +IceProxy::Ice::Object::__begin_ice_ids( + const ::Ice::Context* ctx, + const ::IceInternal::Function<void (const ::std::vector< ::std::string>&)>& response, + const ::IceInternal::Function<void (const ::Ice::Exception&)>& exception, + const ::IceInternal::Function<void (bool)>& sent) +{ + class Cpp11CB : public ::IceInternal::Cpp11FnCallbackNC + { + public: + + Cpp11CB(const ::std::function<void (const ::std::vector< ::std::string>&)>& responseFunc, + const ::std::function<void (const ::Ice::Exception&)>& exceptionFunc, + const ::std::function<void (bool)>& sentFunc) : + ::IceInternal::Cpp11FnCallbackNC(exceptionFunc, sentFunc), + _response(responseFunc) + { + CallbackBase::checkCallback(true, responseFunc || exceptionFunc != nullptr); + } + + virtual void __completed(const ::Ice::AsyncResultPtr& __result) const + { + ::Ice::ObjectPrx __proxy = ::Ice::ObjectPrx::uncheckedCast(__result->getProxy()); + ::std::vector< ::std::string> __ret; + try + { + __ret = __proxy->end_ice_ids(__result); + } + catch(const ::Ice::Exception& ex) + { + Cpp11FnCallbackNC::__exception(__result, ex); + return; + } + if(_response != nullptr) + { + _response(__ret); + } + } + + private: + + ::std::function<void (const ::std::vector< ::std::string>&)> _response; + }; + return begin_ice_ids(ctx, new Cpp11CB(response, exception, sent), 0); +} + +Ice::AsyncResultPtr +IceProxy::Ice::Object::__begin_ice_invoke( + const ::std::string& operation, + ::Ice::OperationMode mode, + const ::std::vector< ::Ice::Byte>& inParams, + const ::Ice::Context* ctx, + const ::IceInternal::Function<void (bool, const ::std::vector< ::Ice::Byte>&)>& response, + const ::IceInternal::Function<void (const ::Ice::Exception&)>& exception, + const ::IceInternal::Function<void (bool)>& sent) +{ + class Cpp11CB : public ::IceInternal::Cpp11FnCallbackNC + { + public: + + Cpp11CB(const ::std::function<void (bool, const ::std::vector< ::Ice::Byte>&)>& responseFunc, + const ::std::function<void (const ::Ice::Exception&)>& exceptionFunc, + const ::std::function<void (bool)>& sentFunc) : + ::IceInternal::Cpp11FnCallbackNC(exceptionFunc, sentFunc), + _response(responseFunc) + { + CallbackBase::checkCallback(true, responseFunc || exceptionFunc != nullptr); + } + + virtual void __completed(const ::Ice::AsyncResultPtr& __result) const + { + ::Ice::ObjectPrx __proxy = ::Ice::ObjectPrx::uncheckedCast(__result->getProxy()); + bool __ret; + ::std::vector< ::Ice::Byte> p1; + try + { + __ret = __proxy->end_ice_invoke(p1, __result); + } + catch(const ::Ice::Exception& ex) + { + Cpp11FnCallbackNC::__exception(__result, ex); + return; + } + if(_response != nullptr) + { + _response(__ret, p1); + } + } + + private: + + ::std::function<void (bool, const ::std::vector< ::Ice::Byte>&)> _response; + }; + + return begin_ice_invoke(operation, mode, inParams, ctx, new Cpp11CB(response, exception, sent), 0); +} + +Ice::AsyncResultPtr +IceProxy::Ice::Object::__begin_ice_invoke( + const ::std::string& operation, + ::Ice::OperationMode mode, + const ::std::pair<const ::Ice::Byte*, const ::Ice::Byte*>& inParams, + const ::Ice::Context* ctx, + const ::IceInternal::Function<void (bool, const ::std::pair<const ::Ice::Byte*, const ::Ice::Byte*>&)>& response, + const ::IceInternal::Function<void (const ::Ice::Exception&)>& exception, + const ::IceInternal::Function<void (bool)>& sent) +{ + class Cpp11CB : public ::IceInternal::Cpp11FnCallbackNC + { + public: + + Cpp11CB(const ::std::function<void (bool, const ::std::pair<const ::Ice::Byte*, + const ::Ice::Byte*>&)>& responseFunc, + const ::std::function<void (const ::Ice::Exception&)>& exceptionFunc, + const ::std::function<void (bool)>& sentFunc) : + ::IceInternal::Cpp11FnCallbackNC(exceptionFunc, sentFunc), + _response(responseFunc) + { + CallbackBase::checkCallback(true, _response || _exception != nullptr); + } + + virtual void __completed(const ::Ice::AsyncResultPtr& __result) const + { + bool __ret; + ::std::pair<const ::Ice::Byte*, const ::Ice::Byte*> p1; + try + { + __ret = __result->getProxy()->___end_ice_invoke(p1, __result); + } + catch(const ::Ice::Exception& ex) + { + Cpp11FnCallbackNC::__exception(__result, ex); + return; + } + if(_response != nullptr) + { + _response(__ret, p1); + } + } + + private: + + ::std::function<void (bool, const ::std::pair<const ::Ice::Byte*, const ::Ice::Byte*>&)> _response; + }; + return begin_ice_invoke(operation, mode, inParams, ctx, new Cpp11CB(response, exception, sent), 0); +} + +#endif + + bool IceProxy::Ice::Object::end_ice_isA(const AsyncResultPtr& __result) { diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index 91397221f03..4c1dcbed7da 100644 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -2294,7 +2294,7 @@ Slice::Gen::ProxyVisitor::visitOperation(const OperationPtr& p) } writeEndCode(C, outParams, p); C << eb; - C << nl << "catch(::Ice::Exception& ex)"; + C << nl << "catch(const ::Ice::Exception& ex)"; C << sb; C << nl << "Cpp11FnCallbackNC::__exception(__result, ex);"; C << nl << "return;"; @@ -4325,7 +4325,7 @@ Slice::Gen::AsyncCallbackTemplateVisitor::generateOperation(const OperationPtr& } writeEndCode(H, outParams, p); H << eb; - H << nl << "catch(::Ice::Exception& ex)"; + H << nl << "catch(const ::Ice::Exception& ex)"; H << sb; H << nl << "" << baseD << "::__exception(__result, ex);"; |