100.00% Lines (44/44) 100.00% Functions (2/2)
TLA Baseline Branch
Line Hits Code Line Hits Code
1   // 1   //
2   // Copyright (c) 2023 Vinnie Falco (vinnie.falco@gmail.com) 2   // Copyright (c) 2023 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   #include <boost/capy/buffers/buffer_pair.hpp> 10   #include <boost/capy/buffers/buffer_pair.hpp>
11   #include <boost/capy/buffers/slice.hpp> 11   #include <boost/capy/buffers/slice.hpp>
12   12  
13   namespace boost { 13   namespace boost {
14   namespace capy { 14   namespace capy {
15   15  
16   void 16   void
HITCBC 17   1040 tag_invoke( 17   1040 tag_invoke(
18   slice_tag const&, 18   slice_tag const&,
19   const_buffer_pair& bs, 19   const_buffer_pair& bs,
20   slice_how how, 20   slice_how how,
21   std::size_t n) noexcept 21   std::size_t n) noexcept
22   { 22   {
HITCBC 23   1040 switch(how) 23   1040 switch(how)
24   { 24   {
HITCBC 25   512 case slice_how::remove_prefix: 25   512 case slice_how::remove_prefix:
26   { 26   {
HITCBC 27   512 auto p = &bs[0]; 27   512 auto p = &bs[0];
HITCBC 28   512 if(n < p->size()) 28   512 if(n < p->size())
29   { 29   {
HITCBC 30   225 remove_prefix(*p, n); 30   225 remove_prefix(*p, n);
HITCBC 31   225 return; 31   225 return;
32   } 32   }
HITCBC 33   287 n -= p->size(); 33   287 n -= p->size();
HITCBC 34   287 *p = bs[1]; 34   287 *p = bs[1];
HITCBC 35   287 bs[1] = {}; 35   287 bs[1] = {};
HITCBC 36   287 remove_prefix(*p, n); 36   287 remove_prefix(*p, n);
HITCBC 37   287 return; 37   287 return;
38   } 38   }
39   39  
HITCBC 40   528 case slice_how::keep_prefix: 40   528 case slice_how::keep_prefix:
41   { 41   {
HITCBC 42   528 auto p = &bs[0]; 42   528 auto p = &bs[0];
HITCBC 43   528 if(n <= p->size()) 43   528 if(n <= p->size())
44   { 44   {
HITCBC 45   287 keep_prefix(*p, n); 45   287 keep_prefix(*p, n);
HITCBC 46   287 bs[1] = {}; 46   287 bs[1] = {};
HITCBC 47   287 return; 47   287 return;
48   } 48   }
HITCBC 49   241 n -= p->size(); 49   241 n -= p->size();
HITCBC 50   241 ++p; 50   241 ++p;
HITCBC 51   241 keep_prefix(*p, n); 51   241 keep_prefix(*p, n);
HITCBC 52   241 return; 52   241 return;
53   } 53   }
54   } 54   }
55   } 55   }
56   56  
57   void 57   void
HITCBC 58   1040 tag_invoke( 58   1040 tag_invoke(
59   slice_tag const&, 59   slice_tag const&,
60   mutable_buffer_pair& bs, 60   mutable_buffer_pair& bs,
61   slice_how how, 61   slice_how how,
62   std::size_t n) noexcept 62   std::size_t n) noexcept
63   { 63   {
HITCBC 64   1040 switch(how) 64   1040 switch(how)
65   { 65   {
HITCBC 66   512 case slice_how::remove_prefix: 66   512 case slice_how::remove_prefix:
67   { 67   {
HITCBC 68   512 auto p = &bs[0]; 68   512 auto p = &bs[0];
HITCBC 69   512 if(n < p->size()) 69   512 if(n < p->size())
70   { 70   {
HITCBC 71   225 remove_prefix(*p, n); 71   225 remove_prefix(*p, n);
HITCBC 72   225 return; 72   225 return;
73   } 73   }
HITCBC 74   287 n -= p->size(); 74   287 n -= p->size();
HITCBC 75   287 *p = bs[1]; 75   287 *p = bs[1];
HITCBC 76   287 bs[1] = {}; 76   287 bs[1] = {};
HITCBC 77   287 remove_prefix(*p, n); 77   287 remove_prefix(*p, n);
HITCBC 78   287 return; 78   287 return;
79   } 79   }
80   80  
HITCBC 81   528 case slice_how::keep_prefix: 81   528 case slice_how::keep_prefix:
82   { 82   {
HITCBC 83   528 auto p = &bs[0]; 83   528 auto p = &bs[0];
HITCBC 84   528 if(n <= p->size()) 84   528 if(n <= p->size())
85   { 85   {
HITCBC 86   287 keep_prefix(*p, n); 86   287 keep_prefix(*p, n);
HITCBC 87   287 bs[1] = {}; 87   287 bs[1] = {};
HITCBC 88   287 return; 88   287 return;
89   } 89   }
HITCBC 90   241 n -= p->size(); 90   241 n -= p->size();
HITCBC 91   241 ++p; 91   241 ++p;
HITCBC 92   241 keep_prefix(*p, n); 92   241 keep_prefix(*p, n);
HITCBC 93   241 return; 93   241 return;
94   } 94   }
95   } 95   }
96   } 96   }
97   97  
98   } // capy 98   } // capy
99   } // boost 99   } // boost