Line | Branch | Exec | Source |
---|---|---|---|
1 | // | ||
2 | // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com) | ||
3 | // | ||
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) | ||
6 | // | ||
7 | // Official repository: https://github.com/CPPAlliance/http_proto | ||
8 | // | ||
9 | |||
10 | #include <boost/http_proto/buffered_base.hpp> | ||
11 | |||
12 | namespace boost { | ||
13 | namespace http_proto { | ||
14 | |||
15 | buffered_base:: | ||
16 | ~buffered_base() = default; | ||
17 | |||
18 | void | ||
19 | 8 | buffered_base:: | |
20 | on_init(allocator&) | ||
21 | { | ||
22 | 8 | } | |
23 | |||
24 | void | ||
25 | 8 | buffered_base:: | |
26 | init( | ||
27 | allocator& a, | ||
28 | std::size_t max_size) | ||
29 | { | ||
30 | // max_size exceeds limit | ||
31 |
2/2✓ Branch 1 taken 1 times.
✓ Branch 2 taken 7 times.
|
8 | if(max_size > a.max_size()) |
32 | 1 | detail::throw_invalid_argument(); | |
33 | |||
34 | struct restorer | ||
35 | { | ||
36 | allocator& a; | ||
37 | std::size_t n; | ||
38 | |||
39 | 7 | ~restorer() | |
40 | 7 | { | |
41 | 7 | a.restore(n); | |
42 | 7 | } | |
43 | }; | ||
44 | |||
45 | auto const n = | ||
46 | 7 | a.max_size() - max_size; | |
47 | 7 | a.remove(n); | |
48 | 7 | restorer r{a, n}; | |
49 |
2/2✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
|
7 | init(a); |
50 | 5 | } | |
51 | |||
52 | //------------------------------------------------ | ||
53 | |||
54 | void* | ||
55 | 10 | buffered_base:: | |
56 | allocator:: | ||
57 | allocate( | ||
58 | std::size_t n) | ||
59 | { | ||
60 | // n exceeds available space | ||
61 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 7 times.
|
10 | if(n > size_) |
62 | 3 | detail::throw_invalid_argument(); | |
63 | |||
64 | 7 | size_used_ += n; | |
65 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 4 times.
|
7 | if(down_) |
66 | { | ||
67 | 3 | auto p = base_ + size_ - n; | |
68 | 3 | size_ -= n; | |
69 | 3 | return p; | |
70 | } | ||
71 | 4 | auto p = base_; | |
72 | 4 | base_ += n; | |
73 | 4 | size_ -= n; | |
74 | 4 | return p; | |
75 | } | ||
76 | |||
77 | } // http_proto | ||
78 | } // boost | ||
79 |