// // Copyright (c) 2013-2017 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) // #ifndef BEAST_TEST_BUFFER_TEST_HPP #define BEAST_TEST_BUFFER_TEST_HPP #include #include #include #include #include #include namespace beast { namespace test { template typename std::enable_if< is_const_buffer_sequence::value, std::size_t>::type buffer_count(ConstBufferSequence const& buffers) { return std::distance(buffers.begin(), buffers.end()); } template typename std::enable_if< is_const_buffer_sequence::value, std::size_t>::type size_pre(ConstBufferSequence const& buffers) { std::size_t n = 0; for(auto it = buffers.begin(); it != buffers.end(); ++it) { typename ConstBufferSequence::const_iterator it0(std::move(it)); typename ConstBufferSequence::const_iterator it1(it0); typename ConstBufferSequence::const_iterator it2; it2 = it1; n += boost::asio::buffer_size(*it2); it = std::move(it2); } return n; } template typename std::enable_if< is_const_buffer_sequence::value, std::size_t>::type size_post(ConstBufferSequence const& buffers) { std::size_t n = 0; for(auto it = buffers.begin(); it != buffers.end(); it++) n += boost::asio::buffer_size(*it); return n; } template typename std::enable_if< is_const_buffer_sequence::value, std::size_t>::type size_rev_pre(ConstBufferSequence const& buffers) { std::size_t n = 0; for(auto it = buffers.end(); it != buffers.begin();) n += boost::asio::buffer_size(*--it); return n; } template typename std::enable_if< is_const_buffer_sequence::value, std::size_t>::type size_rev_post(ConstBufferSequence const& buffers) { std::size_t n = 0; for(auto it = buffers.end(); it != buffers.begin();) { it--; n += boost::asio::buffer_size(*it); } return n; } namespace has_read_size_helper { using beast::detail::read_size_helper; template struct trait : std::false_type {}; template struct trait() = read_size_helper(std::declval(), 0), (void)0)> : std::true_type { }; } // Make sure read_size_helper works template inline void check_read_size_helper() { static_assert(is_dynamic_buffer::value, "DynamicBuffer requirements not met "); static_assert(has_read_size_helper::trait::value, "Missing read_size_helper for dynamic buffer"); } } // test } // beast #endif