GCC Code Coverage Report


Directory: libs/http_proto/include/boost/http_proto/
File: boost/http_proto/detail/impl/workspace.ipp
Date: 2023-01-15 07:18:31
Exec Total Coverage
Lines: 9 18 50.0%
Functions: 1 2 50.0%
Branches: 2 4 50.0%

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 #ifndef BOOST_HTTP_PROTO_DETAIL_IMPL_WORKSPACE_IPP
11 #define BOOST_HTTP_PROTO_DETAIL_IMPL_WORKSPACE_IPP
12
13 #include <boost/http_proto/detail/workspace.hpp>
14 #include <boost/http_proto/detail/except.hpp>
15
16 namespace boost {
17 namespace http_proto {
18 namespace detail {
19
20 workspace::
21 any::
22 ~any() = default;
23
24 void
25 36 workspace::
26 clear() noexcept
27 {
28 36 auto const end =
29 reinterpret_cast<
30 any const*>(end_);
31 36 auto p =
32 reinterpret_cast<
33 any const*>(head_);
34
2/2
✓ Branch 0 taken 38 times.
✓ Branch 1 taken 36 times.
74 while(p != end)
35 {
36 38 auto next = p->next;
37 38 p->~any();
38 38 p = next;
39 }
40 36 head_ = end_;
41 36 }
42
43 void*
44 workspace::
45 reserve(std::size_t n)
46 {
47 // Requested n exceeds available space
48 if(n > size())
49 detail::throw_length_error();
50
51 struct empty : any
52 {
53 };
54
55 using U = empty;
56 auto p = ::new(bump_down(
57 sizeof(U) + n, alignof(
58 ::max_align_t))) U;
59 p->next = reinterpret_cast<
60 any*>(head_);
61 head_ = reinterpret_cast<
62 unsigned char*>(p);
63 return p + 1;
64 }
65
66 } // detail
67 } // http_proto
68 } // boost
69
70 #endif
71