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_IMPL_PARAMS_REF_HPP | ||
12 | #define BOOST_URL_IMPL_PARAMS_REF_HPP | ||
13 | |||
14 | #include <boost/url/params_view.hpp> | ||
15 | #include <boost/url/detail/any_params_iter.hpp> | ||
16 | #include <boost/url/detail/except.hpp> | ||
17 | #include <boost/url/grammar/recycled.hpp> | ||
18 | #include <boost/assert.hpp> | ||
19 | |||
20 | namespace boost { | ||
21 | namespace urls { | ||
22 | |||
23 | inline | ||
24 | 94 | params_ref:: | |
25 | params_ref( | ||
26 | url_base& u, | ||
27 | 94 | encoding_opts opt) noexcept | |
28 | 94 | : params_base(u.impl_, opt) | |
29 | 94 | , u_(&u) | |
30 | { | ||
31 | 94 | } | |
32 | |||
33 | //------------------------------------------------ | ||
34 | // | ||
35 | // Special Members | ||
36 | // | ||
37 | //------------------------------------------------ | ||
38 | |||
39 | inline | ||
40 | 1 | params_ref:: | |
41 | params_ref( | ||
42 | params_ref const& other, | ||
43 | 1 | encoding_opts opt) noexcept | |
44 | 1 | : params_ref(*other.u_, opt) | |
45 | { | ||
46 | 1 | } | |
47 | |||
48 | inline | ||
49 | auto | ||
50 | 1 | params_ref:: | |
51 | operator=(std::initializer_list< | ||
52 | param_view> init) -> | ||
53 | params_ref& | ||
54 | { | ||
55 | 1 | assign(init); | |
56 | 1 | return *this; | |
57 | } | ||
58 | |||
59 | //------------------------------------------------ | ||
60 | // | ||
61 | // Modifiers | ||
62 | // | ||
63 | //------------------------------------------------ | ||
64 | |||
65 | inline | ||
66 | void | ||
67 | 3 | params_ref:: | |
68 | clear() noexcept | ||
69 | { | ||
70 | 3 | u_->remove_query(); | |
71 | 3 | } | |
72 | |||
73 | //------------------------------------------------ | ||
74 | |||
75 | template<class FwdIt> | ||
76 | void | ||
77 | 10 | params_ref:: | |
78 | assign(FwdIt first, FwdIt last) | ||
79 | { | ||
80 | /* If you get a compile error here, it | ||
81 | means that the iterators you passed | ||
82 | do not meet the requirements stated | ||
83 | in the documentation. | ||
84 | */ | ||
85 | static_assert( | ||
86 | std::is_convertible< | ||
87 | typename std::iterator_traits< | ||
88 | FwdIt>::reference, | ||
89 | param_view>::value, | ||
90 | "Type requirements not met"); | ||
91 | |||
92 |
1/2✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
|
10 | assign(first, last, |
93 | typename std::iterator_traits< | ||
94 | FwdIt>::iterator_category{}); | ||
95 | 10 | } | |
96 | |||
97 | inline | ||
98 | auto | ||
99 | 7 | params_ref:: | |
100 | append( | ||
101 | param_view const& p) -> | ||
102 | iterator | ||
103 | { | ||
104 | 7 | return insert(end(), p); | |
105 | } | ||
106 | |||
107 | inline | ||
108 | auto | ||
109 | 5 | params_ref:: | |
110 | append( | ||
111 | std::initializer_list< | ||
112 | param_view> init) -> | ||
113 | iterator | ||
114 | { | ||
115 | 5 | return insert(end(), init); | |
116 | } | ||
117 | |||
118 | template<class FwdIt> | ||
119 | auto | ||
120 | 4 | params_ref:: | |
121 | append(FwdIt first, FwdIt last) -> | ||
122 | iterator | ||
123 | { | ||
124 | /* If you get a compile error here, it | ||
125 | means that the iterators you passed | ||
126 | do not meet the requirements stated | ||
127 | in the documentation. | ||
128 | */ | ||
129 | static_assert( | ||
130 | std::is_convertible< | ||
131 | typename std::iterator_traits< | ||
132 | FwdIt>::reference, | ||
133 | param_view>::value, | ||
134 | "Type requirements not met"); | ||
135 | |||
136 | return insert( | ||
137 | 4 | end(), first, last); | |
138 | } | ||
139 | |||
140 | template<class FwdIt> | ||
141 | auto | ||
142 | 19 | params_ref:: | |
143 | insert( | ||
144 | iterator before, | ||
145 | FwdIt first, | ||
146 | FwdIt last) -> | ||
147 | iterator | ||
148 | { | ||
149 | /* If you get a compile error here, it | ||
150 | means that the iterators you passed | ||
151 | do not meet the requirements stated | ||
152 | in the documentation. | ||
153 | */ | ||
154 | static_assert( | ||
155 | std::is_convertible< | ||
156 | typename std::iterator_traits< | ||
157 | FwdIt>::reference, | ||
158 | param_view>::value, | ||
159 | "Type requirements not met"); | ||
160 | |||
161 | return insert( | ||
162 | before, | ||
163 | first, | ||
164 | last, | ||
165 | typename std::iterator_traits< | ||
166 |
1/2✓ Branch 1 taken 19 times.
✗ Branch 2 not taken.
|
19 | FwdIt>::iterator_category{}); |
167 | } | ||
168 | |||
169 | template<class FwdIt> | ||
170 | auto | ||
171 | 4 | params_ref:: | |
172 | replace( | ||
173 | iterator from, | ||
174 | iterator to, | ||
175 | FwdIt first, | ||
176 | FwdIt last) -> | ||
177 | iterator | ||
178 | { | ||
179 | /* If you get a compile error here, it | ||
180 | means that the iterators you passed | ||
181 | do not meet the requirements stated | ||
182 | in the documentation. | ||
183 | */ | ||
184 | static_assert( | ||
185 | std::is_convertible< | ||
186 | typename std::iterator_traits< | ||
187 | FwdIt>::reference, | ||
188 | param_view>::value, | ||
189 | "Type requirements not met"); | ||
190 | |||
191 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
8 | return iterator( |
192 | 4 | u_->edit_params( | |
193 | from.it_, to.it_, | ||
194 | detail::make_params_iter( | ||
195 | first, last)), | ||
196 | 8 | opt_); | |
197 | } | ||
198 | |||
199 | //------------------------------------------------ | ||
200 | // | ||
201 | // implementation | ||
202 | // | ||
203 | //------------------------------------------------ | ||
204 | |||
205 | template<class FwdIt> | ||
206 | void | ||
207 | 10 | params_ref:: | |
208 | assign(FwdIt first, FwdIt last, | ||
209 | std::forward_iterator_tag) | ||
210 | { | ||
211 |
1/2✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
|
20 | u_->edit_params( |
212 | 10 | begin().it_, | |
213 | 20 | end().it_, | |
214 | detail::make_params_iter( | ||
215 | first, last)); | ||
216 | 10 | } | |
217 | |||
218 | template<class FwdIt> | ||
219 | auto | ||
220 | 19 | params_ref:: | |
221 | insert( | ||
222 | iterator before, | ||
223 | FwdIt first, | ||
224 | FwdIt last, | ||
225 | std::forward_iterator_tag) -> | ||
226 | iterator | ||
227 | { | ||
228 |
1/2✓ Branch 1 taken 19 times.
✗ Branch 2 not taken.
|
38 | return iterator( |
229 | 19 | u_->edit_params( | |
230 | before.it_, | ||
231 | before.it_, | ||
232 | detail::make_params_iter( | ||
233 | first, last)), | ||
234 | 38 | opt_); | |
235 | } | ||
236 | |||
237 | } // urls | ||
238 | } // boost | ||
239 | |||
240 | #endif | ||
241 |