GCC Code Coverage Report


Directory: libs/url/
File: boost/url/params_view.hpp
Date: 2024-03-15 19:37:09
Exec Total Coverage
Lines: 1 1 100.0%
Functions: 1 1 100.0%
Branches: 0 0 -%

Line Branch Exec Source
1 //
2 // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
3 // Copyright (c) 2022 Alan de Freitas (alandefreitas@gmail.com)
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/boostorg/url
9 //
10
11 #ifndef BOOST_URL_PARAMS_VIEW_HPP
12 #define BOOST_URL_PARAMS_VIEW_HPP
13
14 #include <boost/url/detail/config.hpp>
15 #include <boost/url/params_base.hpp>
16
17 namespace boost {
18 namespace urls {
19
20 /** A view representing query parameters in a URL
21
22 Objects of this type are used to interpret
23 the query parameters as a bidirectional view
24 of key/value pairs.
25
26 The view does not retain ownership of the
27 elements and instead references the original
28 character buffer. The caller is responsible
29 for ensuring that the lifetime of the buffer
30 extends until it is no longer referenced.
31
32 @par Example
33 @code
34 url_view u( "?first=John&last=Doe" );
35
36 params_view p = u.params();
37 @endcode
38
39 Percent escapes in strings returned when
40 dereferencing iterators are automatically
41 decoded.
42
43 @par Iterator Invalidation
44 Changes to the underlying character buffer
45 can invalidate iterators which reference it.
46 */
47 class params_view
48 : public params_base
49 {
50 friend class url_view_base;
51 friend class params_encoded_view;
52 friend class params_ref;
53
54 params_view(
55 detail::query_ref const& ref,
56 encoding_opts opt) noexcept;
57
58 public:
59 /** Constructor
60
61 Default-constructed params have
62 zero elements.
63
64 @par Example
65 @code
66 params_view qp;
67 @endcode
68
69 @par Effects
70 @code
71 return params_view( "" );
72 @endcode
73
74 @par Complexity
75 Constant.
76
77 @par Exception Safety
78 Throws nothing.
79 */
80 1 params_view() = default;
81
82 /** Constructor
83
84 After construction both views reference
85 the same character buffer.
86
87 Ownership is not transferred; the caller
88 is responsible for ensuring the lifetime
89 of the buffer extends until it is no
90 longer referenced.
91
92 @par Postconditions
93 @code
94 this->buffer().data() == other.buffer().data()
95 @endcode
96
97 @par Complexity
98 Constant.
99
100 @par Exception Safety
101 Throws nothing
102 */
103 params_view(
104 params_view const& other) = default;
105
106 /** Constructor
107
108 After construction both views will
109 reference the same character buffer
110 but this instance will use the specified
111 @ref encoding_opts when the values
112 are decoded.
113
114 Ownership is not transferred; the caller
115 is responsible for ensuring the lifetime
116 of the buffer extends until it is no
117 longer referenced.
118
119 @par Postconditions
120 @code
121 this->buffer().data() == other.buffer().data()
122 @endcode
123
124 @par Complexity
125 Constant.
126
127 @par Exception Safety
128 Throws nothing
129 */
130 params_view(
131 params_view const& other,
132 encoding_opts opt) noexcept;
133
134 /** Constructor
135
136 This function constructs params from
137 a valid query parameter string, which
138 can contain percent escapes. Unlike
139 the parameters in URLs, the string
140 passed here should not start with "?".
141 Upon construction, the view references
142 the character buffer pointed to by `s`.
143 The caller is responsible for ensuring
144 that the lifetime of the buffer extends
145 until it is no longer referenced.
146
147 @par Example
148 @code
149 params_view qp( "first=John&last=Doe" );
150 @endcode
151
152 @par Effects
153 @code
154 return parse_query( s ).value();
155 @endcode
156
157 @par Postconditions
158 @code
159 this->buffer().data() == s.data()
160 @endcode
161
162 @par Complexity
163 Linear in `s`.
164
165 @par Exception Safety
166 Exceptions thrown on invalid input.
167
168 @throw system_error
169 `s` contains an invalid query parameter
170 string.
171
172 @param s The string to parse.
173
174 @par BNF
175 @code
176 query-params = [ query-param ] *( "&" query-param )
177
178 query-param = key [ "=" value ]
179 @endcode
180
181 @par Specification
182 @li <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-3.4"
183 >3.4. Query</a>
184 */
185 BOOST_URL_DECL
186 params_view(
187 core::string_view s);
188
189 /** Constructor
190
191 This function constructs params from
192 a valid query parameter string, which
193 can contain percent escapes.
194
195 This instance will use the specified
196 @ref encoding_opts when the values
197 are decoded.
198
199 Unlike the parameters in URLs, the string
200 passed here should not start with "?".
201 Upon construction, the view will
202 reference the character buffer pointed
203 to by `s`. The caller is responsible
204 for ensuring that the lifetime of the
205 buffer extends until it is no longer
206 referenced.
207
208 @par Example
209 @code
210 encoding_opts opt;
211 opt.space_as_plus = true;
212 params_view qp( "name=John+Doe", opt );
213 @endcode
214
215 @par Effects
216 @code
217 return params_view(parse_query( s ).value(), opt);
218 @endcode
219
220 @par Postconditions
221 @code
222 this->buffer().data() == s.data()
223 @endcode
224
225 @par Complexity
226 Linear in `s`.
227
228 @par Exception Safety
229 Exceptions thrown on invalid input.
230
231 @throw system_error
232 `s` contains an invalid query parameter
233 string.
234
235 @param s The string to parse.
236
237 @param opt The options for decoding. If
238 this parameter is omitted, `space_as_plus`
239 is used.
240
241 @par BNF
242 @code
243 query-params = [ query-param ] *( "&" query-param )
244
245 query-param = key [ "=" value ]
246 @endcode
247
248 @par Specification
249 @li <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-3.4"
250 >3.4. Query</a>
251 */
252 BOOST_URL_DECL
253 params_view(
254 core::string_view s,
255 encoding_opts opt);
256
257 /** Assignment
258
259 After assignment, both views reference
260 the same underlying character buffer.
261
262 Ownership is not transferred; the caller
263 is responsible for ensuring the lifetime
264 of the buffer extends until it is no
265 longer referenced.
266
267 @par Postconditions
268 @code
269 this->buffer().data() == other.buffer().data()
270 @endcode
271
272 @par Complexity
273 Constant
274
275 @par Exception Safety
276 Throws nothing
277 */
278 params_view&
279 operator=(
280 params_view const&) = default;
281 };
282
283 } // urls
284 } // boost
285
286 #endif
287