2 // Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 // Official repository: https://github.com/boostorg/beast
10 #ifndef BOOST_BEAST_TEST_BUFFER_TEST_HPP
11 #define BOOST_BEAST_TEST_BUFFER_TEST_HPP
13 #include <boost/beast/core/string.hpp>
14 #include <boost/beast/core/read_size.hpp>
15 #include <boost/beast/core/type_traits.hpp>
16 #include <boost/beast/core/detail/type_traits.hpp>
17 #include <boost/asio/buffer.hpp>
20 #include <type_traits>
26 template<class ConstBufferSequence>
27 typename std::enable_if<
28 boost::asio::is_const_buffer_sequence<ConstBufferSequence>::value,
30 to_string(ConstBufferSequence const& bs)
33 s.reserve(buffer_size(bs));
34 for(auto b : beast::detail::buffers_range(bs))
35 s.append(reinterpret_cast<char const*>(b.data()),
40 template<class DynamicBuffer>
42 write_buffer(DynamicBuffer& b, string_view s)
44 b.commit(boost::asio::buffer_copy(
45 b.prepare(s.size()), boost::asio::buffer(
46 s.data(), s.size())));
49 template<class ConstBufferSequence>
50 typename std::enable_if<
51 boost::asio::is_const_buffer_sequence<ConstBufferSequence>::value,
53 buffer_count(ConstBufferSequence const& buffers)
55 return std::distance(buffers.begin(), buffers.end());
58 template<class ConstBufferSequence>
59 typename std::enable_if<
60 boost::asio::is_const_buffer_sequence<ConstBufferSequence>::value,
62 size_pre(ConstBufferSequence const& buffers)
65 for(auto it = buffers.begin(); it != buffers.end(); ++it)
67 typename ConstBufferSequence::const_iterator it0(std::move(it));
68 typename ConstBufferSequence::const_iterator it1(it0);
69 typename ConstBufferSequence::const_iterator it2;
71 n += boost::asio::buffer_size(*it2);
77 template<class ConstBufferSequence>
78 typename std::enable_if<
79 boost::asio::is_const_buffer_sequence<ConstBufferSequence>::value,
81 size_post(ConstBufferSequence const& buffers)
84 for(auto it = buffers.begin(); it != buffers.end(); it++)
85 n += boost::asio::buffer_size(*it);
89 template<class ConstBufferSequence>
90 typename std::enable_if<
91 boost::asio::is_const_buffer_sequence<ConstBufferSequence>::value,
93 size_rev_pre(ConstBufferSequence const& buffers)
96 for(auto it = buffers.end(); it != buffers.begin();)
97 n += boost::asio::buffer_size(*--it);
101 template<class ConstBufferSequence>
102 typename std::enable_if<
103 boost::asio::is_const_buffer_sequence<ConstBufferSequence>::value,
105 size_rev_post(ConstBufferSequence const& buffers)
108 for(auto it = buffers.end(); it != buffers.begin();)
111 n += boost::asio::buffer_size(*it);