| // |
| // handler_alloc_hook.hpp |
| // ~~~~~~~~~~~~~~~~~~~~~~ |
| // |
| // Copyright (c) 2003-2010 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_HANDLER_ALLOC_HOOK_HPP |
| #define BOOST_ASIO_HANDLER_ALLOC_HOOK_HPP |
| |
| #if defined(_MSC_VER) && (_MSC_VER >= 1200) |
| # pragma once |
| #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) |
| |
| #include <boost/asio/detail/config.hpp> |
| #include <cstddef> |
| |
| #include <boost/asio/detail/push_options.hpp> |
| |
| namespace boost { |
| namespace asio { |
| |
| /// Default allocation function for handlers. |
| /** |
| * Asynchronous operations may need to allocate temporary objects. Since |
| * asynchronous operations have a handler function object, these temporary |
| * objects can be said to be associated with the handler. |
| * |
| * Implement asio_handler_allocate and asio_handler_deallocate for your own |
| * handlers to provide custom allocation for these temporary objects. |
| * |
| * This default implementation is simply: |
| * @code |
| * return ::operator new(size); |
| * @endcode |
| * |
| * @note All temporary objects associated with a handler will be deallocated |
| * before the upcall to the handler is performed. This allows the same memory to |
| * be reused for a subsequent asynchronous operation initiated by the handler. |
| * |
| * @par Example |
| * @code |
| * class my_handler; |
| * |
| * void* asio_handler_allocate(std::size_t size, my_handler* context) |
| * { |
| * return ::operator new(size); |
| * } |
| * |
| * void asio_handler_deallocate(void* pointer, std::size_t size, |
| * my_handler* context) |
| * { |
| * ::operator delete(pointer); |
| * } |
| * @endcode |
| */ |
| inline void* asio_handler_allocate(std::size_t size, ...) |
| { |
| return ::operator new(size); |
| } |
| |
| /// Default deallocation function for handlers. |
| /** |
| * Implement asio_handler_allocate and asio_handler_deallocate for your own |
| * handlers to provide custom allocation for the associated temporary objects. |
| * |
| * This default implementation is simply: |
| * @code |
| * ::operator delete(pointer); |
| * @endcode |
| * |
| * @sa asio_handler_allocate. |
| */ |
| inline void asio_handler_deallocate(void* pointer, std::size_t size, ...) |
| { |
| (void)(size); |
| ::operator delete(pointer); |
| } |
| |
| } // namespace asio |
| } // namespace boost |
| |
| #include <boost/asio/detail/pop_options.hpp> |
| |
| #endif // BOOST_ASIO_HANDLER_ALLOC_HOOK_HPP |