GCC Code Coverage Report


Directory: libs/url/
File: libs/url/src/detail/any_segments_iter.cpp
Date: 2024-03-12 19:37:18
Exec Total Coverage
Lines: 70 70 100.0%
Functions: 12 12 100.0%
Branches: 18 20 90.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/boostorg/url
8 //
9
10
11 #include <boost/url/detail/config.hpp>
12 #include "../rfc/detail/charsets.hpp"
13 #include <boost/url/detail/any_segments_iter.hpp>
14 #include <boost/core/detail/string_view.hpp>
15 #include <boost/url/encode.hpp>
16 #include <boost/url/rfc/pchars.hpp>
17
18 namespace boost {
19 namespace urls {
20 namespace detail {
21
22 //------------------------------------------------
23 //
24 // segment_iter
25 //
26 //------------------------------------------------
27
28 74 segment_iter::
29 segment_iter(
30 74 core::string_view s_) noexcept
31 74 : any_segments_iter(s_)
32 {
33 74 front = s;
34 74 fast_nseg = 1;
35 74 }
36
37 void
38 74 segment_iter::
39 rewind() noexcept
40 {
41 74 at_end_ = false;
42 74 }
43
44 bool
45 148 segment_iter::
46 measure(
47 std::size_t& n) noexcept
48 {
49
2/2
✓ Branch 0 taken 74 times.
✓ Branch 1 taken 74 times.
148 if(at_end_)
50 74 return false;
51 74 encoding_opts opt;
52 74 opt.space_as_plus = false;
53 74 n += encoded_size(
54 s,
55
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 72 times.
74 encode_colons ?
56 nocolon_pchars :
57 pchars,
58 opt);
59 74 at_end_ = true;
60 74 return true;
61 }
62
63 void
64 74 segment_iter::
65 copy(
66 char*& dest,
67 char const* end) noexcept
68 {
69 74 encoding_opts opt;
70 74 opt.space_as_plus = false;
71 74 dest += encode(
72 dest,
73 74 end - dest,
74 s,
75
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 72 times.
74 encode_colons ?
76 nocolon_pchars :
77 pchars,
78 opt);
79 74 }
80
81 //------------------------------------------------
82 //
83 // segments_iter_base
84 //
85 //------------------------------------------------
86
87 void
88 188 segments_iter_base::
89 measure_impl(
90 std::size_t& n,
91 core::string_view s,
92 bool encode_colons) noexcept
93 {
94 188 encoding_opts opt;
95 188 opt.space_as_plus = false;
96
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 188 times.
188 n += encoded_size(
97 s,
98 encode_colons ?
99 nocolon_pchars :
100 pchars,
101 opt);
102 188 }
103
104 void
105 188 segments_iter_base::
106 copy_impl(
107 char*& dest,
108 char const* end,
109 core::string_view s,
110 bool encode_colons) noexcept
111 {
112 188 encoding_opts opt;
113 188 opt.space_as_plus = false;
114
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 188 times.
188 dest += encode(
115 dest,
116 188 end - dest,
117 s,
118 encode_colons ?
119 nocolon_pchars :
120 pchars,
121 opt);
122 188 }
123
124 //------------------------------------------------
125 //
126 // segment_encoded_iter
127 //
128 //------------------------------------------------
129
130 72 segment_encoded_iter::
131 segment_encoded_iter(
132 72 pct_string_view const& s_) noexcept
133 72 : any_segments_iter(s_)
134 {
135 72 front = s;
136 72 fast_nseg = 1;
137 72 }
138
139 void
140 72 segment_encoded_iter::
141 rewind() noexcept
142 {
143 72 at_end_ = false;
144 72 }
145
146 bool
147 144 segment_encoded_iter::
148 measure(
149 std::size_t& n) noexcept
150 {
151
2/2
✓ Branch 0 taken 72 times.
✓ Branch 1 taken 72 times.
144 if(at_end_)
152 72 return false;
153 72 encoding_opts opt;
154 72 opt.space_as_plus = false;
155 72 n += detail::re_encoded_size_unsafe(
156 s,
157
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 70 times.
72 encode_colons ?
158 nocolon_pchars :
159 pchars,
160 opt);
161 72 at_end_ = true;
162 72 return true;
163 }
164
165 void
166 72 segment_encoded_iter::
167 copy(
168 char*& dest,
169 char const* end) noexcept
170 {
171 72 encoding_opts opt;
172 72 opt.space_as_plus = false;
173 72 detail::re_encode_unsafe(
174 dest,
175 end,
176 s,
177
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 70 times.
72 encode_colons ?
178 nocolon_pchars :
179 pchars,
180 opt);
181 72 }
182
183 //------------------------------------------------
184 //
185 // segments_encoded_iter_base
186 //
187 //------------------------------------------------
188
189 void
190 399 segments_encoded_iter_base::
191 measure_impl(
192 std::size_t& n,
193 core::string_view s,
194 bool encode_colons) noexcept
195 {
196 399 encoding_opts opt;
197 399 opt.space_as_plus = false;
198
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 398 times.
399 n += detail::re_encoded_size_unsafe(
199 s,
200 encode_colons ?
201 nocolon_pchars :
202 pchars,
203 opt);
204 399 }
205
206 void
207 397 segments_encoded_iter_base::
208 copy_impl(
209 char*& dest,
210 char const* end,
211 core::string_view s,
212 bool encode_colons) noexcept
213 {
214 397 encoding_opts opt;
215 397 opt.space_as_plus = false;
216
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 396 times.
397 detail::re_encode_unsafe(
217 dest,
218 end,
219 s,
220 encode_colons ?
221 nocolon_pchars :
222 pchars,
223 opt);
224 397 }
225
226 } // detail
227 } // urls
228 } // boost
229
230