96.97% Lines (32/33)
100.00% Functions (4/4)
| 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/http | 7 | // Official repository: https://github.com/cppalliance/http | |||||
| 8 | // | 8 | // | |||||
| 9 | 9 | |||||||
| 10 | #include <boost/http/detail/circular_buffer.hpp> | 10 | #include <boost/http/detail/circular_buffer.hpp> | |||||
| 11 | #include <boost/http/detail/except.hpp> | 11 | #include <boost/http/detail/except.hpp> | |||||
| 12 | 12 | |||||||
| 13 | namespace boost { | 13 | namespace boost { | |||||
| 14 | namespace http { | 14 | namespace http { | |||||
| 15 | namespace detail { | 15 | namespace detail { | |||||
| 16 | 16 | |||||||
| 17 | auto | 17 | auto | |||||
| HITCBC | 18 | 169490 | circular_buffer:: | 18 | 169700 | circular_buffer:: | ||
| 19 | data() const noexcept -> | 19 | data() const noexcept -> | |||||
| 20 | const_buffers_type | 20 | const_buffers_type | |||||
| 21 | { | 21 | { | |||||
| HITCBC | 22 | 169490 | if(in_pos_ + in_len_ <= cap_) | 22 | 169700 | if(in_pos_ + in_len_ <= cap_) | ||
| 23 | return {{ | 23 | return {{ | |||||
| HITCBC | 24 | 153209 | capy::const_buffer{ base_ + in_pos_, in_len_ }, | 24 | 153419 | capy::const_buffer{ base_ + in_pos_, in_len_ }, | ||
| HITCBC | 25 | 153209 | capy::const_buffer{ base_, 0} }}; | 25 | 153419 | capy::const_buffer{ base_, 0} }}; | ||
| 26 | return {{ | 26 | return {{ | |||||
| HITCBC | 27 | 16281 | capy::const_buffer{ base_ + in_pos_, cap_ - in_pos_}, | 27 | 16281 | capy::const_buffer{ base_ + in_pos_, cap_ - in_pos_}, | ||
| HITCBC | 28 | 16281 | capy::const_buffer{ base_, in_len_- (cap_ - in_pos_)} }}; | 28 | 16281 | capy::const_buffer{ base_, in_len_- (cap_ - in_pos_)} }}; | ||
| 29 | } | 29 | } | |||||
| 30 | 30 | |||||||
| 31 | auto | 31 | auto | |||||
| HITCBC | 32 | 89946 | circular_buffer:: | 32 | 90154 | circular_buffer:: | ||
| 33 | prepare(std::size_t n) -> | 33 | prepare(std::size_t n) -> | |||||
| 34 | mutable_buffers_type | 34 | mutable_buffers_type | |||||
| 35 | { | 35 | { | |||||
| 36 | // Buffer is too small for n | 36 | // Buffer is too small for n | |||||
| HITCBC | 37 | 89946 | if(n > cap_ - in_len_) | 37 | 90154 | if(n > cap_ - in_len_) | ||
| MISUBC | 38 | ✗ | detail::throw_length_error(); | 38 | ✗ | detail::throw_length_error(); | ||
| 39 | 39 | |||||||
| HITCBC | 40 | 89946 | out_size_ = n; | 40 | 90154 | out_size_ = n; | ||
| HITCBC | 41 | 89946 | auto const pos = ( | 41 | 90154 | auto const pos = ( | ||
| HITCBC | 42 | 89946 | in_pos_ + in_len_) % cap_; | 42 | 90154 | in_pos_ + in_len_) % cap_; | ||
| HITCBC | 43 | 89946 | if(pos + n <= cap_) | 43 | 90154 | if(pos + n <= cap_) | ||
| 44 | return {{ | 44 | return {{ | |||||
| HITCBC | 45 | 53870 | capy::mutable_buffer{ base_ + pos, n }, | 45 | 54078 | capy::mutable_buffer{ base_ + pos, n }, | ||
| HITCBC | 46 | 53870 | capy::mutable_buffer{ base_, 0 } }}; | 46 | 54078 | capy::mutable_buffer{ base_, 0 } }}; | ||
| 47 | return {{ | 47 | return {{ | |||||
| HITCBC | 48 | 36076 | capy::mutable_buffer{ base_ + pos, cap_ - pos }, | 48 | 36076 | capy::mutable_buffer{ base_ + pos, cap_ - pos }, | ||
| HITCBC | 49 | 36076 | capy::mutable_buffer{ base_, n - (cap_ - pos) } }}; | 49 | 36076 | capy::mutable_buffer{ base_, n - (cap_ - pos) } }}; | ||
| 50 | } | 50 | } | |||||
| 51 | 51 | |||||||
| 52 | void | 52 | void | |||||
| HITCBC | 53 | 89644 | circular_buffer:: | 53 | 89826 | circular_buffer:: | ||
| 54 | commit( | 54 | commit( | |||||
| 55 | std::size_t n) noexcept | 55 | std::size_t n) noexcept | |||||
| 56 | { | 56 | { | |||||
| HITCBC | 57 | 89644 | if(n < out_size_) | 57 | 89826 | if(n < out_size_) | ||
| HITCBC | 58 | 89367 | in_len_ += n; | 58 | 89549 | in_len_ += n; | ||
| 59 | else | 59 | else | |||||
| HITCBC | 60 | 277 | in_len_ += out_size_; | 60 | 277 | in_len_ += out_size_; | ||
| HITCBC | 61 | 89644 | out_size_ = 0; | 61 | 89826 | out_size_ = 0; | ||
| HITCBC | 62 | 89644 | } | 62 | 89826 | } | ||
| 63 | 63 | |||||||
| 64 | void | 64 | void | |||||
| HITCBC | 65 | 143741 | circular_buffer:: | 65 | 143923 | circular_buffer:: | ||
| 66 | consume( | 66 | consume( | |||||
| 67 | std::size_t n) noexcept | 67 | std::size_t n) noexcept | |||||
| 68 | { | 68 | { | |||||
| HITCBC | 69 | 143741 | if(n < in_len_) | 69 | 143923 | if(n < in_len_) | ||
| 70 | { | 70 | { | |||||
| HITCBC | 71 | 115209 | in_pos_ = (in_pos_ + n) % cap_; | 71 | 115209 | in_pos_ = (in_pos_ + n) % cap_; | ||
| HITCBC | 72 | 115209 | in_len_ -= n; | 72 | 115209 | in_len_ -= n; | ||
| 73 | } | 73 | } | |||||
| 74 | else | 74 | else | |||||
| 75 | { | 75 | { | |||||
| 76 | // preserve in_pos_ if there is | 76 | // preserve in_pos_ if there is | |||||
| 77 | // a prepared buffer | 77 | // a prepared buffer | |||||
| HITCBC | 78 | 28532 | if(out_size_ != 0) | 78 | 28714 | if(out_size_ != 0) | ||
| 79 | { | 79 | { | |||||
| HITCBC | 80 | 1 | in_pos_ = (in_pos_ + in_len_) % cap_; | 80 | 1 | in_pos_ = (in_pos_ + in_len_) % cap_; | ||
| HITCBC | 81 | 1 | in_len_ = 0; | 81 | 1 | in_len_ = 0; | ||
| 82 | } | 82 | } | |||||
| 83 | else | 83 | else | |||||
| 84 | { | 84 | { | |||||
| 85 | // make prepare return a | 85 | // make prepare return a | |||||
| 86 | // bigger single buffer | 86 | // bigger single buffer | |||||
| HITCBC | 87 | 28531 | in_pos_ = 0; | 87 | 28713 | in_pos_ = 0; | ||
| HITCBC | 88 | 28531 | in_len_ = 0; | 88 | 28713 | in_len_ = 0; | ||
| 89 | } | 89 | } | |||||
| 90 | } | 90 | } | |||||
| HITCBC | 91 | 143741 | } | 91 | 143923 | } | ||
| 92 | 92 | |||||||
| 93 | } // detail | 93 | } // detail | |||||
| 94 | } // http | 94 | } // http | |||||
| 95 | } // boost | 95 | } // boost | |||||