// // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail 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) // // Official repository: https://github.com/boostorg/beast // #ifndef BHO_BEAST_BUFFERS_RANGE_HPP #define BHO_BEAST_BUFFERS_RANGE_HPP #include <asio2/bho/beast/core/detail/config.hpp> #include <asio2/bho/beast/core/buffer_traits.hpp> #include <asio2/bho/beast/core/detail/buffers_range_adaptor.hpp> namespace bho { namespace beast { /** Returns an iterable range representing a buffer sequence. This function returns an iterable range representing the passed buffer sequence. The values obtained when iterating the range will be `net::const_buffer`, unless the underlying buffer sequence is a <em>MutableBufferSequence</em>, in which case the value obtained when iterating will be a `net::mutable_buffer`. @par Example The following function returns the total number of bytes in the specified buffer sequence. A copy of the buffer sequence is maintained for the lifetime of the range object: @code template <class BufferSequence> std::size_t buffer_sequence_size (BufferSequence const& buffers) { std::size_t size = 0; for (auto const buffer : buffers_range (buffers)) size += buffer.size(); return size; } @endcode @param buffers The buffer sequence to adapt into a range. The range object returned from this function will contain a copy of the passed buffer sequence. @return An object of unspecified type which meets the requirements of <em>ConstBufferSequence</em>. If `buffers` is a mutable buffer sequence, the returned object will also meet the requirements of <em>MutableBufferSequence</em>. @see buffers_range_ref */ template<class BufferSequence> #if BHO_BEAST_DOXYGEN __implementation_defined__ #else detail::buffers_range_adaptor<BufferSequence> #endif buffers_range(BufferSequence const& buffers) { static_assert( is_const_buffer_sequence<BufferSequence>::value, "BufferSequence type requirements not met"); return detail::buffers_range_adaptor< BufferSequence>(buffers); } /** Returns an iterable range representing a buffer sequence. This function returns an iterable range representing the passed buffer sequence. The values obtained when iterating the range will be `net::const_buffer`, unless the underlying buffer sequence is a <em>MutableBufferSequence</em>, in which case the value obtained when iterating will be a `net::mutable_buffer`. @par Example The following function returns the total number of bytes in the specified buffer sequence. A reference to the original buffers is maintained for the lifetime of the range object: @code template <class BufferSequence> std::size_t buffer_sequence_size_ref (BufferSequence const& buffers) { std::size_t size = 0; for (auto const buffer : buffers_range_ref (buffers)) size += buffer.size(); return size; } @endcode @param buffers The buffer sequence to adapt into a range. The range returned from this function will maintain a reference to these buffers. The application is responsible for ensuring that the lifetime of the referenced buffers extends until the range object is destroyed. @return An object of unspecified type which meets the requirements of <em>ConstBufferSequence</em>. If `buffers` is a mutable buffer sequence, the returned object will also meet the requirements of <em>MutableBufferSequence</em>. @see buffers_range */ template<class BufferSequence> #if BHO_BEAST_DOXYGEN __implementation_defined__ #else detail::buffers_range_adaptor<BufferSequence const&> #endif buffers_range_ref(BufferSequence const& buffers) { static_assert( is_const_buffer_sequence<BufferSequence>::value, "BufferSequence type requirements not met"); return detail::buffers_range_adaptor< BufferSequence const&>(buffers); } } // beast } // bho #endif