// // 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 BOOST_BEAST_BUFFERS_RANGE_HPP #define BOOST_BEAST_BUFFERS_RANGE_HPP #include #include #include namespace boost { 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 MutableBufferSequence, 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 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 ConstBufferSequence. If `buffers` is a mutable buffer sequence, the returned object will also meet the requirements of MutableBufferSequence. @see buffers_range_ref */ template #if BOOST_BEAST_DOXYGEN __implementation_defined__ #else detail::buffers_range_adaptor #endif buffers_range(BufferSequence const& buffers) { static_assert( is_const_buffer_sequence::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 MutableBufferSequence, 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 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 ConstBufferSequence. If `buffers` is a mutable buffer sequence, the returned object will also meet the requirements of MutableBufferSequence. @see buffers_range */ template #if BOOST_BEAST_DOXYGEN __implementation_defined__ #else detail::buffers_range_adaptor #endif buffers_range_ref(BufferSequence const& buffers) { static_assert( is_const_buffer_sequence::value, "BufferSequence type requirements not met"); return detail::buffers_range_adaptor< BufferSequence const&>(buffers); } /** @} */ } // beast } // boost #endif