// // 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_CAT_HPP #define BOOST_BEAST_BUFFERS_CAT_HPP #include #include #include #include namespace boost { namespace beast { /** A buffer sequence representing a concatenation of buffer sequences. @see buffers_cat */ template class buffers_cat_view { detail::tuple bn_; public: /** The type of buffer returned when dereferencing an iterator. If every buffer sequence in the view is a MutableBufferSequence, then `value_type` will be `net::mutable_buffer`. Otherwise, `value_type` will be `net::const_buffer`. */ #if BOOST_BEAST_DOXYGEN using value_type = __see_below__; #else using value_type = buffers_type; #endif /// The type of iterator used by the concatenated sequence class const_iterator; /// Copy Constructor buffers_cat_view(buffers_cat_view const&) = default; /// Copy Assignment buffers_cat_view& operator=(buffers_cat_view const&) = default; /** Constructor @param buffers The list of buffer sequences to concatenate. Copies of the arguments will be maintained for the lifetime of the concatenated sequence; however, the ownership of the memory buffers themselves is not transferred. */ explicit buffers_cat_view(Buffers const&... buffers); /// Returns an iterator to the first buffer in the sequence const_iterator begin() const; /// Returns an iterator to one past the last buffer in the sequence const_iterator end() const; }; /** Concatenate 1 or more buffer sequences. This function returns a constant or mutable buffer sequence which, when iterated, efficiently concatenates the input buffer sequences. Copies of the arguments passed will be made; however, the returned object does not take ownership of the underlying memory. The application is still responsible for managing the lifetime of the referenced memory. @param buffers The list of buffer sequences to concatenate. @return A new buffer sequence that represents the concatenation of the input buffer sequences. This buffer sequence will be a MutableBufferSequence if each of the passed buffer sequences is also a MutableBufferSequence; otherwise the returned buffer sequence will be a ConstBufferSequence. @see buffers_cat_view */ #if BOOST_BEAST_DOXYGEN template buffers_cat_view buffers_cat(BufferSequence const&... buffers) #else template buffers_cat_view buffers_cat(B1 const& b1, Bn const&... bn) #endif { static_assert( is_const_buffer_sequence::value, "BufferSequence type requirements not met"); return buffers_cat_view{b1, bn...}; } } // beast } // boost #include #endif