summaryrefslogtreecommitdiff
path: root/cpp/include/Ice/Dispatcher.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/include/Ice/Dispatcher.h')
-rw-r--r--cpp/include/Ice/Dispatcher.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/cpp/include/Ice/Dispatcher.h b/cpp/include/Ice/Dispatcher.h
index 323ca7afa68..5ad42625215 100644
--- a/cpp/include/Ice/Dispatcher.h
+++ b/cpp/include/Ice/Dispatcher.h
@@ -9,9 +9,13 @@
#pragma once
+#include <IceUtil/Config.h>
#include <IceUtil/Shared.h>
#include <IceUtil/Handle.h>
#include <Ice/ConnectionF.h>
+#ifdef ICE_CPP11
+# include <functional>
+#endif
namespace Ice
{
@@ -37,3 +41,36 @@ public:
typedef IceUtil::Handle<Dispatcher> DispatcherPtr;
}
+
+#ifdef ICE_CPP11
+namespace IceInternal
+{
+class ICE_API Cpp11Dispatcher : public ::Ice::Dispatcher
+{
+public:
+
+ Cpp11Dispatcher(const ::std::function<void (const ::Ice::DispatcherCallPtr&, const ::Ice::ConnectionPtr)>& cb) :
+ _cb(cb)
+ {
+ }
+
+ virtual void dispatch(const ::Ice::DispatcherCallPtr& call, const ::Ice::ConnectionPtr& conn);
+
+private:
+
+ const ::std::function<void (const ::Ice::DispatcherCallPtr&, const ::Ice::ConnectionPtr)> _cb;
+};
+
+}
+
+namespace Ice
+{
+
+inline DispatcherPtr
+newDispatcher(const ::std::function<void (const ::Ice::DispatcherCallPtr&, const ::Ice::ConnectionPtr)>& cb)
+{
+ return new ::IceInternal::Cpp11Dispatcher(cb);
+}
+
+}
+#endif