⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wrapped_handler.hpp

📁 这是国外的resip协议栈
💻 HPP
字号:
//// wrapped_handler.hpp// ~~~~~~~~~~~~~~~~~~~//// Copyright (c) 2003-2007 Christopher M. Kohlhoff (chris at kohlhoff dot com)//// Distributed under the Boost Software License, Version 1.0. (See accompanying// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//#ifndef ASIO_DETAIL_WRAPPED_HANDLER_HPP#define ASIO_DETAIL_WRAPPED_HANDLER_HPP#if defined(_MSC_VER) && (_MSC_VER >= 1200)# pragma once#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)#include "asio/detail/push_options.hpp"#include "asio/detail/push_options.hpp"#include <boost/type_traits.hpp>#include "asio/detail/pop_options.hpp"#include "asio/detail/bind_handler.hpp"#include "asio/detail/handler_alloc_helpers.hpp"#include "asio/detail/handler_invoke_helpers.hpp"namespace asio {namespace detail {template <typename Dispatcher, typename Handler>class wrapped_handler{public:  typedef void result_type;  wrapped_handler(      typename boost::add_reference<Dispatcher>::type dispatcher,      Handler handler)    : dispatcher_(dispatcher),      handler_(handler)  {  }  void operator()()  {    dispatcher_.dispatch(handler_);  }  void operator()() const  {    dispatcher_.dispatch(handler_);  }  template <typename Arg1>  void operator()(const Arg1& arg1)  {    dispatcher_.dispatch(detail::bind_handler(handler_, arg1));  }  template <typename Arg1>  void operator()(const Arg1& arg1) const  {    dispatcher_.dispatch(detail::bind_handler(handler_, arg1));  }  template <typename Arg1, typename Arg2>  void operator()(const Arg1& arg1, const Arg2& arg2)  {    dispatcher_.dispatch(detail::bind_handler(handler_, arg1, arg2));  }  template <typename Arg1, typename Arg2>  void operator()(const Arg1& arg1, const Arg2& arg2) const  {    dispatcher_.dispatch(detail::bind_handler(handler_, arg1, arg2));  }  template <typename Arg1, typename Arg2, typename Arg3>  void operator()(const Arg1& arg1, const Arg2& arg2, const Arg3& arg3)  {    dispatcher_.dispatch(detail::bind_handler(handler_, arg1, arg2, arg3));  }  template <typename Arg1, typename Arg2, typename Arg3>  void operator()(const Arg1& arg1, const Arg2& arg2, const Arg3& arg3) const  {    dispatcher_.dispatch(detail::bind_handler(handler_, arg1, arg2, arg3));  }  template <typename Arg1, typename Arg2, typename Arg3, typename Arg4>  void operator()(const Arg1& arg1, const Arg2& arg2, const Arg3& arg3,      const Arg4& arg4)  {    dispatcher_.dispatch(        detail::bind_handler(handler_, arg1, arg2, arg3, arg4));  }  template <typename Arg1, typename Arg2, typename Arg3, typename Arg4>  void operator()(const Arg1& arg1, const Arg2& arg2, const Arg3& arg3,      const Arg4& arg4) const  {    dispatcher_.dispatch(        detail::bind_handler(handler_, arg1, arg2, arg3, arg4));  }  template <typename Arg1, typename Arg2, typename Arg3, typename Arg4,      typename Arg5>  void operator()(const Arg1& arg1, const Arg2& arg2, const Arg3& arg3,      const Arg4& arg4, const Arg5& arg5)  {    dispatcher_.dispatch(        detail::bind_handler(handler_, arg1, arg2, arg3, arg4, arg5));  }  template <typename Arg1, typename Arg2, typename Arg3, typename Arg4,      typename Arg5>  void operator()(const Arg1& arg1, const Arg2& arg2, const Arg3& arg3,      const Arg4& arg4, const Arg5& arg5) const  {    dispatcher_.dispatch(        detail::bind_handler(handler_, arg1, arg2, arg3, arg4, arg5));  }//private:  Dispatcher dispatcher_;  Handler handler_;};template <typename Dispatcher, typename Handler>inline void* asio_handler_allocate(std::size_t size,    wrapped_handler<Dispatcher, Handler>* this_handler){  return asio_handler_alloc_helpers::allocate(      size, &this_handler->handler_);}template <typename Dispatcher, typename Handler>inline void asio_handler_deallocate(void* pointer, std::size_t size,    wrapped_handler<Dispatcher, Handler>* this_handler){  asio_handler_alloc_helpers::deallocate(      pointer, size, &this_handler->handler_);}template <typename Handler, typename Context>class rewrapped_handler{public:  explicit rewrapped_handler(const Handler& handler, const Context& context)    : handler_(handler),      context_(context)  {  }  void operator()()  {    handler_();  }  void operator()() const  {    handler_();  }//private:  Handler handler_;  Context context_;};template <typename Function, typename Dispatcher, typename Handler>inline void asio_handler_invoke(const Function& function,    wrapped_handler<Dispatcher, Handler>* this_handler){  this_handler->dispatcher_.dispatch(      rewrapped_handler<Function, Handler>(        function, this_handler->handler_));}template <typename Function, typename Handler, typename Context>inline void asio_handler_invoke(const Function& function,    rewrapped_handler<Handler, Context>* this_handler){  asio_handler_invoke_helpers::invoke(      function, &this_handler->context_);}} // namespace detail} // namespace asio#include "asio/detail/pop_options.hpp"#endif // ASIO_DETAIL_WRAPPED_HANDLER_HPP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -