91.67% Lines (11/12) 100.00% Functions (2/2)
TLA Baseline Branch
Line Hits Code Line Hits Code
1   // 1   //
2   // Copyright (c) 2025 Vinnie Falco (vinnie.falco@gmail.com) 2   // Copyright (c) 2025 Vinnie Falco (vinnie.falco@gmail.com)
3   // 3   //
4   // Distributed under the Boost Software License, Version 1.0. (See accompanying 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) 5   // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6   // 6   //
7   // Official repository: https://github.com/cppalliance/capy 7   // Official repository: https://github.com/cppalliance/capy
8   // 8   //
9   9  
10   #ifndef BOOST_CAPY_TEST_BUFFER_TO_STRING_HPP 10   #ifndef BOOST_CAPY_TEST_BUFFER_TO_STRING_HPP
11   #define BOOST_CAPY_TEST_BUFFER_TO_STRING_HPP 11   #define BOOST_CAPY_TEST_BUFFER_TO_STRING_HPP
12   12  
13   #include <boost/capy/detail/config.hpp> 13   #include <boost/capy/detail/config.hpp>
14   #include <boost/capy/buffers.hpp> 14   #include <boost/capy/buffers.hpp>
15   15  
16   #include <string> 16   #include <string>
17   17  
18   namespace boost { 18   namespace boost {
19   namespace capy { 19   namespace capy {
20   namespace test { 20   namespace test {
21   21  
22   /** Convert one or more buffer sequences to a string. 22   /** Convert one or more buffer sequences to a string.
23   23  
24   This function concatenates the bytes from all provided buffer 24   This function concatenates the bytes from all provided buffer
25   sequences into a single string. With a single argument, it 25   sequences into a single string. With a single argument, it
26   converts that buffer sequence to a string. With multiple 26   converts that buffer sequence to a string. With multiple
27   arguments, it concatenates them in order. 27   arguments, it concatenates them in order.
28   28  
29   @par Example 29   @par Example
30   @par !example example 30   @par !example example
31   31  
32   32  
33   @param bufs One or more buffer sequences to concatenate. 33   @param bufs One or more buffer sequences to concatenate.
34   34  
35   @return A string containing all bytes from the buffer sequences. 35   @return A string containing all bytes from the buffer sequences.
36   */ 36   */
37   template<ConstBufferSequence... Buffers> 37   template<ConstBufferSequence... Buffers>
38   std::string 38   std::string
HITCBC 39   176 buffer_to_string(Buffers const&... bufs) 39   176 buffer_to_string(Buffers const&... bufs)
40   { 40   {
HITCBC 41   176 std::string result; 41   176 std::string result;
HITCBC 42   176 result.reserve((buffer_size(bufs) + ...)); 42   176 result.reserve((buffer_size(bufs) + ...));
HITCBC 43   488 auto append = [&](auto const& bs) { 43   488 auto append = [&](auto const& bs) {
HITCBC 44   312 auto const e = end(bs); 44   312 auto const e = end(bs);
HITCBC 45   634 for(auto it = begin(bs); it != e; ++it) 45   634 for(auto it = begin(bs); it != e; ++it)
46   { 46   {
HITCBC 47   319 const_buffer b(*it); 47   319 const_buffer b(*it);
HITCBC 48   644 result.append( 48   644 result.append(
HITCBC 49   322 static_cast<char const*>(b.data()), 49   322 static_cast<char const*>(b.data()),
50   b.size()); 50   b.size());
51   } 51   }
52   }; 52   };
HITCBC 53   176 (append(bufs), ...); 53   176 (append(bufs), ...);
HITCBC 54   352 return result; 54   352 return result;
MISUBC 55   } 55   }
56   56  
57   } // test 57   } // test
58   } // capy 58   } // capy
59   } // boost 59   } // boost
60   60  
61   #endif 61   #endif