blob: dd224a7d33954186f25cce7fc3db284a0a21a54d [file] [log] [blame]
//
// deprecated_async_ops.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2003-2015 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 ARCHETYPES_DEPRECATED_ASYNC_OPS_HPP
#define ARCHETYPES_DEPRECATED_ASYNC_OPS_HPP
#include <asio/async_result.hpp>
#if !defined(ASIO_NO_DEPRECATED)
#include <asio/handler_type.hpp>
#include <asio/error.hpp>
#include <asio/io_context.hpp>
#if defined(ASIO_HAS_BOOST_BIND)
# include <boost/bind.hpp>
#else // defined(ASIO_HAS_BOOST_BIND)
# include <functional>
#endif // defined(ASIO_HAS_BOOST_BIND)
namespace archetypes {
#if defined(ASIO_HAS_BOOST_BIND)
namespace bindns = boost;
#else // defined(ASIO_HAS_BOOST_BIND)
namespace bindns = std;
#endif // defined(ASIO_HAS_BOOST_BIND)
template <typename CompletionToken>
typename asio::async_result<
typename asio::handler_type<CompletionToken,
void()>::type>::type
deprecated_async_op_0(asio::io_context& ctx,
ASIO_MOVE_ARG(CompletionToken) token)
{
typedef typename asio::handler_type<CompletionToken,
void()>::type handler_type;
handler_type handler(ASIO_MOVE_CAST(CompletionToken)(token));
asio::async_result<handler_type> result(handler);
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler)));
return result.get();
}
template <typename CompletionToken>
typename asio::async_result<
typename asio::handler_type<CompletionToken,
void(asio::error_code)>::type>::type
deprecated_async_op_ec_0(asio::io_context& ctx,
bool ok, ASIO_MOVE_ARG(CompletionToken) token)
{
typedef typename asio::handler_type<CompletionToken,
void(asio::error_code)>::type handler_type;
handler_type handler(ASIO_MOVE_CAST(CompletionToken)(token));
asio::async_result<handler_type> result(handler);
if (ok)
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
asio::error_code()));
}
else
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
asio::error_code(asio::error::operation_aborted)));
}
return result.get();
}
template <typename CompletionToken>
typename asio::async_result<
typename asio::handler_type<CompletionToken,
void(std::exception_ptr)>::type>::type
deprecated_async_op_ex_0(asio::io_context& ctx,
bool ok, ASIO_MOVE_ARG(CompletionToken) token)
{
typedef typename asio::handler_type<CompletionToken,
void(std::exception_ptr)>::type handler_type;
handler_type handler(ASIO_MOVE_CAST(CompletionToken)(token));
asio::async_result<handler_type> result(handler);
if (ok)
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
std::exception_ptr()));
}
else
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
std::make_exception_ptr(std::runtime_error("blah"))));
}
return result.get();
}
template <typename CompletionToken>
typename asio::async_result<
typename asio::handler_type<CompletionToken,
void(int)>::type>::type
deprecated_async_op_1(asio::io_context& ctx,
ASIO_MOVE_ARG(CompletionToken) token)
{
typedef typename asio::handler_type<CompletionToken,
void(int)>::type handler_type;
handler_type handler(ASIO_MOVE_CAST(CompletionToken)(token));
asio::async_result<handler_type> result(handler);
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler), 42));
return result.get();
}
template <typename CompletionToken>
typename asio::async_result<
typename asio::handler_type<CompletionToken,
void(asio::error_code, int)>::type>::type
deprecated_async_op_ec_1(asio::io_context& ctx,
bool ok, ASIO_MOVE_ARG(CompletionToken) token)
{
typedef typename asio::handler_type<CompletionToken,
void(asio::error_code, int)>::type handler_type;
handler_type handler(ASIO_MOVE_CAST(CompletionToken)(token));
asio::async_result<handler_type> result(handler);
if (ok)
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
asio::error_code(), 42));
}
else
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
asio::error_code(asio::error::operation_aborted), 0));
}
return result.get();
}
template <typename CompletionToken>
typename asio::async_result<
typename asio::handler_type<CompletionToken,
void(std::exception_ptr, int)>::type>::type
deprecated_async_op_ex_1(asio::io_context& ctx,
bool ok, ASIO_MOVE_ARG(CompletionToken) token)
{
typedef typename asio::handler_type<CompletionToken,
void(std::exception_ptr, int)>::type handler_type;
handler_type handler(ASIO_MOVE_CAST(CompletionToken)(token));
asio::async_result<handler_type> result(handler);
if (ok)
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
std::exception_ptr(), 42));
}
else
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
std::make_exception_ptr(std::runtime_error("blah")), 0));
}
return result.get();
}
template <typename CompletionToken>
typename asio::async_result<
typename asio::handler_type<CompletionToken,
void(int, double)>::type>::type
deprecated_async_op_2(asio::io_context& ctx,
ASIO_MOVE_ARG(CompletionToken) token)
{
typedef typename asio::handler_type<CompletionToken,
void(int, double)>::type handler_type;
handler_type handler(ASIO_MOVE_CAST(CompletionToken)(token));
asio::async_result<handler_type> result(handler);
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
42, 2.0));
return result.get();
}
template <typename CompletionToken>
typename asio::async_result<
typename asio::handler_type<CompletionToken,
void(asio::error_code, int, double)>::type>::type
deprecated_async_op_ec_2(asio::io_context& ctx,
bool ok, ASIO_MOVE_ARG(CompletionToken) token)
{
typedef typename asio::handler_type<CompletionToken,
void(asio::error_code, int, double)>::type handler_type;
handler_type handler(ASIO_MOVE_CAST(CompletionToken)(token));
asio::async_result<handler_type> result(handler);
if (ok)
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
asio::error_code(), 42, 2.0));
}
else
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
asio::error_code(asio::error::operation_aborted),
0, 0.0));
}
return result.get();
}
template <typename CompletionToken>
typename asio::async_result<
typename asio::handler_type<CompletionToken,
void(std::exception_ptr, int, double)>::type>::type
deprecated_async_op_ex_2(asio::io_context& ctx,
bool ok, ASIO_MOVE_ARG(CompletionToken) token)
{
typedef typename asio::handler_type<CompletionToken,
void(std::exception_ptr, int, double)>::type handler_type;
handler_type handler(ASIO_MOVE_CAST(CompletionToken)(token));
asio::async_result<handler_type> result(handler);
if (ok)
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
std::exception_ptr(), 42, 2.0));
}
else
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
std::make_exception_ptr(std::runtime_error("blah")), 0, 0.0));
}
return result.get();
}
template <typename CompletionToken>
typename asio::async_result<
typename asio::handler_type<CompletionToken,
void(int, double, char)>::type>::type
deprecated_async_op_3(asio::io_context& ctx,
ASIO_MOVE_ARG(CompletionToken) token)
{
typedef typename asio::handler_type<CompletionToken,
void(int, double, char)>::type handler_type;
handler_type handler(ASIO_MOVE_CAST(CompletionToken)(token));
asio::async_result<handler_type> result(handler);
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
42, 2.0, 'a'));
return result.get();
}
template <typename CompletionToken>
typename asio::async_result<
typename asio::handler_type<CompletionToken,
void(asio::error_code, int, double, char)>::type>::type
deprecated_async_op_ec_3(asio::io_context& ctx,
bool ok, ASIO_MOVE_ARG(CompletionToken) token)
{
typedef typename asio::handler_type<CompletionToken,
void(asio::error_code, int, double, char)>::type handler_type;
handler_type handler(ASIO_MOVE_CAST(CompletionToken)(token));
asio::async_result<handler_type> result(handler);
if (ok)
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
asio::error_code(), 42, 2.0, 'a'));
}
else
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
asio::error_code(asio::error::operation_aborted),
0, 0.0, 'z'));
}
return result.get();
}
template <typename CompletionToken>
typename asio::async_result<
typename asio::handler_type<CompletionToken,
void(std::exception_ptr, int, double, char)>::type>::type
deprecated_async_op_ex_3(asio::io_context& ctx,
bool ok, ASIO_MOVE_ARG(CompletionToken) token)
{
typedef typename asio::handler_type<CompletionToken,
void(std::exception_ptr, int, double, char)>::type handler_type;
handler_type handler(ASIO_MOVE_CAST(CompletionToken)(token));
asio::async_result<handler_type> result(handler);
if (ok)
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
std::exception_ptr(), 42, 2.0, 'a'));
}
else
{
ctx.post(bindns::bind(ASIO_MOVE_CAST(handler_type)(handler),
std::make_exception_ptr(std::runtime_error("blah")),
0, 0.0, 'z'));
}
return result.get();
}
} // namespace archetypes
#endif // !defined(ASIO_NO_DEPRECATED)
#endif // ARCHETYPES_DEPRECATED_ASYNC_OPS_HPP