summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Ice/CommunicatorI.cpp39
-rw-r--r--cpp/src/Ice/CommunicatorI.h15
-rw-r--r--cpp/src/Ice/ConnectionI.cpp39
-rw-r--r--cpp/src/Ice/ConnectionI.h17
-rw-r--r--cpp/src/Ice/Initialize.cpp24
-rw-r--r--cpp/src/Ice/OutgoingAsync.cpp49
-rw-r--r--cpp/src/Ice/Proxy.cpp293
-rw-r--r--cpp/src/slice2cpp/Gen.cpp4
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);";