2 // Copyright (c) 2013-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)
8 #ifndef BEAST_TEST_BUFFER_TEST_HPP
9 #define BEAST_TEST_BUFFER_TEST_HPP
11 #include <beast/core/buffer_concepts.hpp>
12 #include <boost/asio/buffer.hpp>
14 #include <type_traits>
19 template<class ConstBufferSequence>
20 typename std::enable_if<
21 is_ConstBufferSequence<ConstBufferSequence>::value,
23 buffer_count(ConstBufferSequence const& buffers)
25 return std::distance(buffers.begin(), buffers.end());
28 template<class ConstBufferSequence>
29 typename std::enable_if<
30 is_ConstBufferSequence<ConstBufferSequence>::value,
32 size_pre(ConstBufferSequence const& buffers)
35 for(auto it = buffers.begin(); it != buffers.end(); ++it)
37 typename ConstBufferSequence::const_iterator it0(std::move(it));
38 typename ConstBufferSequence::const_iterator it1(it0);
39 typename ConstBufferSequence::const_iterator it2;
41 n += boost::asio::buffer_size(*it2);
47 template<class ConstBufferSequence>
48 typename std::enable_if<
49 is_ConstBufferSequence<ConstBufferSequence>::value,
51 size_post(ConstBufferSequence const& buffers)
54 for(auto it = buffers.begin(); it != buffers.end(); it++)
55 n += boost::asio::buffer_size(*it);
59 template<class ConstBufferSequence>
60 typename std::enable_if<
61 is_ConstBufferSequence<ConstBufferSequence>::value,
63 size_rev_pre(ConstBufferSequence const& buffers)
66 for(auto it = buffers.end(); it != buffers.begin();)
67 n += boost::asio::buffer_size(*--it);
71 template<class ConstBufferSequence>
72 typename std::enable_if<
73 is_ConstBufferSequence<ConstBufferSequence>::value,
75 size_rev_post(ConstBufferSequence const& buffers)
78 for(auto it = buffers.end(); it != buffers.begin();)
81 n += boost::asio::buffer_size(*it);