]> git.proxmox.com Git - ceph.git/blob - ceph/src/Beast/test/core/buffer_test.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / Beast / test / core / buffer_test.hpp
1 //
2 // Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
3 //
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)
6 //
7
8 #ifndef BEAST_TEST_BUFFER_TEST_HPP
9 #define BEAST_TEST_BUFFER_TEST_HPP
10
11 #include <beast/core/buffer_concepts.hpp>
12 #include <boost/asio/buffer.hpp>
13 #include <algorithm>
14 #include <type_traits>
15
16 namespace beast {
17 namespace test {
18
19 template<class ConstBufferSequence>
20 typename std::enable_if<
21 is_ConstBufferSequence<ConstBufferSequence>::value,
22 std::size_t>::type
23 buffer_count(ConstBufferSequence const& buffers)
24 {
25 return std::distance(buffers.begin(), buffers.end());
26 }
27
28 template<class ConstBufferSequence>
29 typename std::enable_if<
30 is_ConstBufferSequence<ConstBufferSequence>::value,
31 std::size_t>::type
32 size_pre(ConstBufferSequence const& buffers)
33 {
34 std::size_t n = 0;
35 for(auto it = buffers.begin(); it != buffers.end(); ++it)
36 {
37 typename ConstBufferSequence::const_iterator it0(std::move(it));
38 typename ConstBufferSequence::const_iterator it1(it0);
39 typename ConstBufferSequence::const_iterator it2;
40 it2 = it1;
41 n += boost::asio::buffer_size(*it2);
42 it = std::move(it2);
43 }
44 return n;
45 }
46
47 template<class ConstBufferSequence>
48 typename std::enable_if<
49 is_ConstBufferSequence<ConstBufferSequence>::value,
50 std::size_t>::type
51 size_post(ConstBufferSequence const& buffers)
52 {
53 std::size_t n = 0;
54 for(auto it = buffers.begin(); it != buffers.end(); it++)
55 n += boost::asio::buffer_size(*it);
56 return n;
57 }
58
59 template<class ConstBufferSequence>
60 typename std::enable_if<
61 is_ConstBufferSequence<ConstBufferSequence>::value,
62 std::size_t>::type
63 size_rev_pre(ConstBufferSequence const& buffers)
64 {
65 std::size_t n = 0;
66 for(auto it = buffers.end(); it != buffers.begin();)
67 n += boost::asio::buffer_size(*--it);
68 return n;
69 }
70
71 template<class ConstBufferSequence>
72 typename std::enable_if<
73 is_ConstBufferSequence<ConstBufferSequence>::value,
74 std::size_t>::type
75 size_rev_post(ConstBufferSequence const& buffers)
76 {
77 std::size_t n = 0;
78 for(auto it = buffers.end(); it != buffers.begin();)
79 {
80 it--;
81 n += boost::asio::buffer_size(*it);
82 }
83 return n;
84 }
85
86 } // test
87 } // beast
88
89 #endif