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   @code 30   @code
31   // Single buffer sequence 31   // Single buffer sequence
32   const_buffer cb( "hello", 5 ); 32   const_buffer cb( "hello", 5 );
33   std::string s = buffer_to_string( cb ); // "hello" 33   std::string s = buffer_to_string( cb ); // "hello"
34   34  
35   // Multiple buffer sequences (concatenation) 35   // Multiple buffer sequences (concatenation)
36   const_buffer b1( "hello", 5 ); 36   const_buffer b1( "hello", 5 );
37   const_buffer b2( " world", 6 ); 37   const_buffer b2( " world", 6 );
38   std::string s = buffer_to_string( b1, b2 ); // "hello world" 38   std::string s = buffer_to_string( b1, b2 ); // "hello world"
39   39  
40   // With bufgrind splits 40   // With bufgrind splits
41   bufgrind bg( cb ); 41   bufgrind bg( cb );
42   while( bg ) { 42   while( bg ) {
43   auto [b1, b2] = co_await bg.next(); 43   auto [b1, b2] = co_await bg.next();
44   BOOST_TEST_EQ( buffer_to_string( b1, b2 ), "hello" ); 44   BOOST_TEST_EQ( buffer_to_string( b1, b2 ), "hello" );
45   } 45   }
46   @endcode 46   @endcode
47   47  
48   @param bufs One or more buffer sequences to concatenate. 48   @param bufs One or more buffer sequences to concatenate.
49   49  
50   @return A string containing all bytes from the buffer sequences. 50   @return A string containing all bytes from the buffer sequences.
51   */ 51   */
52   template<ConstBufferSequence... Buffers> 52   template<ConstBufferSequence... Buffers>
53   std::string 53   std::string
HITCBC 54   1579 buffer_to_string(Buffers const&... bufs) 54   1579 buffer_to_string(Buffers const&... bufs)
55   { 55   {
HITCBC 56   1579 std::string result; 56   1579 std::string result;
HITCBC 57   1579 result.reserve((buffer_size(bufs) + ...)); 57   1579 result.reserve((buffer_size(bufs) + ...));
HITCBC 58   4053 auto append = [&](auto const& bs) { 58   4053 auto append = [&](auto const& bs) {
HITCBC 59   2488 auto const e = end(bs); 59   2488 auto const e = end(bs);
HITCBC 60   4986 for(auto it = begin(bs); it != e; ++it) 60   4986 for(auto it = begin(bs); it != e; ++it)
61   { 61   {
HITCBC 62   2498 const_buffer b(*it); 62   2498 const_buffer b(*it);
HITCBC 63   4996 result.append( 63   4996 result.append(
HITCBC 64   2498 static_cast<char const*>(b.data()), 64   2498 static_cast<char const*>(b.data()),
65   b.size()); 65   b.size());
66   } 66   }
67   }; 67   };
HITCBC 68   1579 (append(bufs), ...); 68   1579 (append(bufs), ...);
HITCBC 69   3158 return result; 69   3158 return result;
MISUBC 70   } 70   }
71   71  
72   } // test 72   } // test
73   } // capy 73   } // capy
74   } // boost 74   } // boost
75   75  
76   #endif 76   #endif