Line | Branch | Exec | Source |
---|---|---|---|
1 | // | ||
2 | // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com) | ||
3 | // Copyright (c) 2025 Mohammad Nejati | ||
4 | // | ||
5 | // Distributed under the Boost Software License, Version 1.0. (See accompanying | ||
6 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | ||
7 | // | ||
8 | // Official repository: https://github.com/cppalliance/http_proto | ||
9 | // | ||
10 | |||
11 | #include "src/detail/array_of_const_buffers.hpp" | ||
12 | |||
13 | #include <boost/http_proto/detail/except.hpp> | ||
14 | |||
15 | #include <boost/buffers/slice.hpp> | ||
16 | |||
17 | namespace boost { | ||
18 | namespace http_proto { | ||
19 | namespace detail { | ||
20 | |||
21 | 83 | array_of_const_buffers:: | |
22 | array_of_const_buffers( | ||
23 | value_type* p, | ||
24 | 83 | std::uint16_t capacity) noexcept | |
25 | 83 | : base_(p) | |
26 | 83 | , cap_(capacity) | |
27 | 83 | , pos_(0) | |
28 | 83 | , size_(0) | |
29 | { | ||
30 | 83 | } | |
31 | |||
32 | void | ||
33 | 3789 | array_of_const_buffers:: | |
34 | consume(std::size_t n) | ||
35 | { | ||
36 |
2/2✓ Branch 0 taken 3888 times.
✓ Branch 1 taken 1954 times.
|
5842 | while(size_ > 0) |
37 | { | ||
38 | 3888 | auto* p = base_ + pos_; | |
39 |
2/2✓ Branch 1 taken 1835 times.
✓ Branch 2 taken 2053 times.
|
3888 | if(n < p->size()) |
40 | { | ||
41 | 1835 | buffers::trim_front(*p, n); | |
42 | 1835 | return; | |
43 | } | ||
44 | 2053 | n -= p->size(); | |
45 | 2053 | ++pos_; | |
46 | 2053 | --size_; | |
47 | } | ||
48 | } | ||
49 | |||
50 | void | ||
51 | 1956 | array_of_const_buffers:: | |
52 | reset(std::uint16_t n) noexcept | ||
53 | { | ||
54 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1956 times.
|
1956 | BOOST_ASSERT(n <= cap_); |
55 | 1956 | pos_ = 0; | |
56 | 1956 | size_ = n; | |
57 | 1956 | } | |
58 | |||
59 | void | ||
60 | 4 | array_of_const_buffers:: | |
61 | slide_to_front() noexcept | ||
62 | { | ||
63 | 4 | auto* p = base_ + pos_; // begin | |
64 | 4 | auto* e = p + size_; // end | |
65 | 4 | auto* d = base_; // dest | |
66 |
2/2✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
|
20 | while(p < e) |
67 | 16 | *d++ = *p++; | |
68 | 4 | pos_ = 0; | |
69 | 4 | } | |
70 | |||
71 | void | ||
72 | 2080 | array_of_const_buffers:: | |
73 | append(value_type buf) noexcept | ||
74 | { | ||
75 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2080 times.
|
2080 | BOOST_ASSERT(size_ < cap_); |
76 | 2080 | base_[pos_ + size_] = buf; | |
77 | 2080 | ++size_; | |
78 | 2080 | } | |
79 | |||
80 | } // detail | ||
81 | } // http_proto | ||
82 | } // boost | ||
83 |