diff options
Diffstat (limited to 'cpp/include/Ice/Dispatcher.h')
-rw-r--r-- | cpp/include/Ice/Dispatcher.h | 37 |
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 |