// // bind.hpp // ~~~~~~~~ // // Copyright (c) 2003-2006 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 BOOST_ASIO_DETAIL_BIND_HPP #define BOOST_ASIO_DETAIL_BIND_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) #include #include namespace boost { namespace asio { namespace detail { template class binder1 { public: binder1(Handler handler, Arg1 arg1) : handler_(handler), arg1_(arg1) { } void operator()() { handler_(arg1_); } void operator()() const { handler_(arg1_); } friend void* asio_handler_allocate(std::size_t size, binder1* this_handler) { return boost_asio_handler_alloc_helpers::allocate( size, &this_handler->handler_); } friend void asio_handler_deallocate(void* pointer, std::size_t size, binder1* this_handler) { boost_asio_handler_alloc_helpers::deallocate( pointer, size, &this_handler->handler_); } private: Handler handler_; Arg1 arg1_; }; template binder1 bind_handler(Handler handler, Arg1 arg1) { return binder1(handler, arg1); } template class binder2 { public: binder2(Handler handler, Arg1 arg1, Arg2 arg2) : handler_(handler), arg1_(arg1), arg2_(arg2) { } void operator()() { handler_(arg1_, arg2_); } void operator()() const { handler_(arg1_, arg2_); } friend void* asio_handler_allocate(std::size_t size, binder2* this_handler) { return boost_asio_handler_alloc_helpers::allocate( size, &this_handler->handler_); } friend void asio_handler_deallocate(void* pointer, std::size_t size, binder2* this_handler) { boost_asio_handler_alloc_helpers::deallocate( pointer, size, &this_handler->handler_); } private: Handler handler_; Arg1 arg1_; Arg2 arg2_; }; template binder2 bind_handler(Handler handler, Arg1 arg1, Arg2 arg2) { return binder2(handler, arg1, arg2); } template class binder3 { public: binder3(Handler handler, Arg1 arg1, Arg2 arg2, Arg3 arg3) : handler_(handler), arg1_(arg1), arg2_(arg2), arg3_(arg3) { } void operator()() { handler_(arg1_, arg2_, arg3_); } void operator()() const { handler_(arg1_, arg2_, arg3_); } friend void* asio_handler_allocate(std::size_t size, binder3* this_handler) { return boost_asio_handler_alloc_helpers::allocate( size, &this_handler->handler_); } friend void asio_handler_deallocate(void* pointer, std::size_t size, binder3* this_handler) { boost_asio_handler_alloc_helpers::deallocate( pointer, size, &this_handler->handler_); } private: Handler handler_; Arg1 arg1_; Arg2 arg2_; Arg3 arg3_; }; template binder3 bind_handler(Handler handler, Arg1 arg1, Arg2 arg2, Arg3 arg3) { return binder3(handler, arg1, arg2, arg3); } template class binder4 { public: binder4(Handler handler, Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) : handler_(handler), arg1_(arg1), arg2_(arg2), arg3_(arg3), arg4_(arg4) { } void operator()() { handler_(arg1_, arg2_, arg3_, arg4_); } void operator()() const { handler_(arg1_, arg2_, arg3_, arg4_); } friend void* asio_handler_allocate(std::size_t size, binder4* this_handler) { return boost_asio_handler_alloc_helpers::allocate( size, &this_handler->handler_); } friend void asio_handler_deallocate(void* pointer, std::size_t size, binder4* this_handler) { boost_asio_handler_alloc_helpers::deallocate( pointer, size, &this_handler->handler_); } private: Handler handler_; Arg1 arg1_; Arg2 arg2_; Arg3 arg3_; Arg4 arg4_; }; template binder4 bind_handler(Handler handler, Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) { return binder4(handler, arg1, arg2, arg3, arg4); } template class binder5 { public: binder5(Handler handler, Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) : handler_(handler), arg1_(arg1), arg2_(arg2), arg3_(arg3), arg4_(arg4), arg5_(arg5) { } void operator()() { handler_(arg1_, arg2_, arg3_, arg4_, arg5_); } void operator()() const { handler_(arg1_, arg2_, arg3_, arg4_, arg5_); } friend void* asio_handler_allocate(std::size_t size, binder5* this_handler) { return boost_asio_handler_alloc_helpers::allocate( size, &this_handler->handler_); } friend void asio_handler_deallocate(void* pointer, std::size_t size, binder5* this_handler) { boost_asio_handler_alloc_helpers::deallocate( pointer, size, &this_handler->handler_); } private: Handler handler_; Arg1 arg1_; Arg2 arg2_; Arg3 arg3_; Arg4 arg4_; Arg5 arg5_; }; template binder5 bind_handler(Handler handler, Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) { return binder5(handler, arg1, arg2, arg3, arg4, arg5); } } // namespace detail } // namespace asio } // namespace boost #include #endif // BOOST_ASIO_DETAIL_BIND_HPP