#ifndef SIMPLE_WEB_ASIO_COMPATIBILITY_HPP #define SIMPLE_WEB_ASIO_COMPATIBILITY_HPP #include #ifdef ASIO_STANDALONE #include #include namespace SimpleWeb { namespace error = asio::error; using error_code = std::error_code; using errc = std::errc; using system_error = std::system_error; namespace make_error_code = std; } // namespace SimpleWeb #else #include #include namespace SimpleWeb { namespace asio = boost::asio; namespace error = asio::error; using error_code = boost::system::error_code; namespace errc = boost::system::errc; using system_error = boost::system::system_error; namespace make_error_code = boost::system::errc; } // namespace SimpleWeb #endif namespace SimpleWeb { #if(ASIO_STANDALONE && ASIO_VERSION >= 101300) || BOOST_ASIO_VERSION >= 101300 using io_context = asio::io_context; using resolver_results = asio::ip::tcp::resolver::results_type; using async_connect_endpoint = asio::ip::tcp::endpoint; template inline void post(io_context &context, handler_type &&handler) { asio::post(context, std::forward(handler)); } inline void restart(io_context &context) noexcept { context.restart(); } inline asio::ip::address make_address(const std::string &str) noexcept { return asio::ip::make_address(str); } template std::unique_ptr make_steady_timer(socket_type &socket, std::chrono::duration duration) { return std::unique_ptr(new asio::steady_timer(socket.get_executor(), duration)); } template void async_resolve(asio::ip::tcp::resolver &resolver, const std::pair &host_port, handler_type &&handler) { resolver.async_resolve(host_port.first, host_port.second, std::forward(handler)); } inline asio::executor_work_guard make_work_guard(io_context &context) { return asio::make_work_guard(context); } #else using io_context = asio::io_service; using resolver_results = asio::ip::tcp::resolver::iterator; using async_connect_endpoint = asio::ip::tcp::resolver::iterator; template inline void post(io_context &context, handler_type &&handler) { context.post(std::forward(handler)); } inline void restart(io_context &context) noexcept { context.reset(); } inline asio::ip::address make_address(const std::string &str) noexcept { return asio::ip::address::from_string(str); } template std::unique_ptr make_steady_timer(socket_type &socket, std::chrono::duration duration) { return std::unique_ptr(new asio::steady_timer(socket.get_io_service(), duration)); } template void async_resolve(asio::ip::tcp::resolver &resolver, const std::pair &host_port, handler_type &&handler) { resolver.async_resolve(asio::ip::tcp::resolver::query(host_port.first, host_port.second), std::forward(handler)); } inline io_context::work make_work_guard(io_context &context) { return io_context::work(context); } #endif } // namespace SimpleWeb #endif /* SIMPLE_WEB_ASIO_COMPATIBILITY_HPP */