GCC Code Coverage Report


Directory: ./
File: libs/http/src/server/detail/stable_string.hpp
Date: 2026-01-20 00:11:35
Exec Total Coverage
Lines: 25 25 100.0%
Functions: 7 7 100.0%
Branches: 4 5 80.0%

Line Branch Exec Source
1 //
2 // Copyright (c) 2025 Vinnie Falco (vinnie dot falco at gmail dot 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
8 //
9
10 #ifndef BOOST_HTTP_SERVER_DETAIL_STABLE_STRING_HPP
11 #define BOOST_HTTP_SERVER_DETAIL_STABLE_STRING_HPP
12
13 #include <boost/http/detail/config.hpp>
14 #include <cstdint>
15 #include <cstdlib>
16
17 namespace boost {
18 namespace http {
19 namespace detail {
20
21 // avoids SBO
22 class stable_string
23 {
24 char const* p_ = 0;
25 std::size_t n_ = 0;
26
27 public:
28 274 ~stable_string()
29 {
30
2/2
✓ Branch 0 taken 116 times.
✓ Branch 1 taken 158 times.
274 if(p_)
31
1/2
✓ Branch 0 taken 116 times.
✗ Branch 1 not taken.
116 delete[] p_;
32 274 }
33
34 stable_string() = default;
35
36 158 stable_string(
37 stable_string&& other) noexcept
38 158 : p_(other.p_)
39 158 , n_(other.n_)
40 {
41 158 other.p_ = nullptr;
42 158 other.n_ = 0;
43 158 }
44
45 stable_string& operator=(
46 stable_string&& other) noexcept
47 {
48 auto p = p_;
49 auto n = n_;
50 p_ = other.p_;
51 n_ = other.n_;
52 other.p_ = p;
53 other.n_ = n;
54 return *this;
55 }
56
57 explicit
58 116 stable_string(
59 std::string_view s)
60 232 : p_(
61 348 [&]
62 {
63 116 auto p =new char[s.size()];
64 116 std::memcpy(p, s.data(), s.size());
65 116 return p;
66
1/1
✓ Branch 1 taken 116 times.
116 }())
67 116 , n_(s.size())
68 {
69 116 }
70
71 stable_string(
72 char const* it, char const* end)
73 : stable_string(std::string_view(it, end))
74 {
75 }
76
77 74 char const* data() const noexcept
78 {
79 74 return p_;
80 }
81
82 74 std::size_t size() const noexcept
83 {
84 74 return n_;
85 }
86
87 74 operator core::string_view() const noexcept
88 {
89 74 return { data(), size() };
90 }
91
92 operator std::string_view() const noexcept
93 {
94 return { data(), size() };
95 }
96 };
97
98 } // detail
99 } // http
100 } // boost
101
102 #endif
103