Line data Source code
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_ENCODED_REF_HPP
12 : #define BOOST_URL_PARAMS_ENCODED_REF_HPP
13 :
14 : #include <boost/url/detail/config.hpp>
15 : #include <boost/url/ignore_case.hpp>
16 : #include <boost/url/params_encoded_view.hpp>
17 : #include <initializer_list>
18 :
19 : namespace boost {
20 : namespace urls {
21 :
22 : #ifndef BOOST_URL_DOCS
23 : class url_base;
24 : class params_encoded_view;
25 : #endif
26 :
27 : /** Mutable encoded query parameter proxy
28 :
29 : This container exposes the percent-encoded
30 : query parameters of a @ref url_base as a
31 : bidirectional range while allowing mutation
32 : of the underlying URL. It references the
33 : URL’s buffer directly, so the url must stay
34 : alive for the lifetime of the proxy.
35 :
36 : @par Example
37 : @code
38 : url u( "?first=John&last=Doe" );
39 :
40 : params_encoded_ref p = u.encoded_params();
41 : @endcode
42 :
43 : Strings produced when elements are returned
44 : have type @ref param_pct_view and represent
45 : encoded strings. Strings passed to member
46 : functions may contain percent escapes, and
47 : throw exceptions on invalid inputs.
48 :
49 : @par Iterator Invalidation
50 : Changes to the underlying character buffer
51 : can invalidate iterators which reference it.
52 : Modifications made through the container
53 : invalidate some iterators to the underlying
54 : character buffer:
55 : @li @ref append : Only `end()`.
56 : @li @ref assign, @ref clear,
57 : `operator=` : All params.
58 : @li @ref erase : Erased params and all
59 : params after (including `end()`).
60 : @li @ref insert : All params at or after
61 : the insertion point (including `end()`).
62 : @li @ref replace, @ref set : Modified
63 : params and all params
64 : after (including `end()`).
65 :
66 : @par Reads vs. writes
67 : Even though this type can be used to mutate
68 : the referenced URL, this is still a proxy
69 : and every observer function inherited
70 : from @ref params_encoded_base (for example
71 : @ref contains, @ref find, and @ref get_or)
72 : behaves like the corresponding function on
73 : @ref params_encoded_view: it inspects the
74 : current encoded query and does not perform
75 : any modifications.
76 : */
77 : class BOOST_URL_DECL params_encoded_ref
78 : : public params_encoded_base
79 : {
80 : friend class url_base;
81 :
82 : url_base* u_ = nullptr;
83 :
84 : params_encoded_ref(
85 : url_base& u) noexcept;
86 :
87 : public:
88 : //--------------------------------------------
89 : //
90 : // Special Members
91 : //
92 : //--------------------------------------------
93 :
94 : /** Constructor
95 :
96 : After construction, both views
97 : reference the same url. Ownership is not
98 : transferred; the caller is responsible
99 : for ensuring the lifetime of the url
100 : extends until it is no longer
101 : referenced.
102 :
103 : @par Postconditions
104 : @code
105 : &this->url() == &other.url();
106 : @endcode
107 :
108 : @par Complexity
109 : Constant.
110 :
111 : @par Exception Safety
112 : Throws nothing.
113 :
114 : @param other The other view.
115 : */
116 : params_encoded_ref(
117 : params_encoded_ref const& other) = default;
118 :
119 : /** Assignment
120 :
121 : The previous contents of this are
122 : replaced by the contents of `other.
123 :
124 : <br>
125 : All iterators are invalidated.
126 :
127 : @note
128 : The strings referenced by `other`
129 : must not come from the underlying url,
130 : or else the behavior is undefined.
131 :
132 : @par Effects
133 : @code
134 : this->assign( other.begin(), other.end() );
135 : @endcode
136 :
137 : @par Complexity
138 : Linear in `other.buffer().size()`.
139 :
140 : @par Exception Safety
141 : Strong guarantee.
142 : Calls to allocate may throw.
143 :
144 : @param other The params to assign.
145 : @return `*this`
146 : */
147 : params_encoded_ref&
148 : operator=(
149 : params_encoded_ref const& other);
150 :
151 : /** Assignment
152 :
153 : After assignment, the previous contents
154 : of the query parameters are replaced by
155 : the contents of the initializer-list.
156 :
157 : <br>
158 : All iterators are invalidated.
159 :
160 : @par Preconditions
161 : None of character buffers referenced by
162 : `init` may overlap the character buffer of
163 : the underlying url, or else the behavior
164 : is undefined.
165 :
166 : @par Effects
167 : @code
168 : this->assign( init.begin(), init.end() );
169 : @endcode
170 :
171 : @par Complexity
172 : Linear in `init.size()`.
173 :
174 : @par Exception Safety
175 : Strong guarantee.
176 : Calls to allocate may throw.
177 : Exceptions thrown on invalid input.
178 :
179 : @throw system_error
180 : `init` contains an invalid percent-encoding.
181 :
182 : @param init The list of params to assign.
183 : @return `*this`
184 : */
185 : params_encoded_ref&
186 : operator=(std::initializer_list<
187 : param_pct_view> init);
188 :
189 : /** Conversion
190 :
191 : @par Complexity
192 : Constant.
193 :
194 : @par Exception Safety
195 : Throws nothing.
196 :
197 : @return A view of the params.
198 : */
199 : operator
200 : params_encoded_view() const noexcept;
201 :
202 : //--------------------------------------------
203 : //
204 : // Observers
205 : //
206 : //--------------------------------------------
207 :
208 : /** Return the referenced url
209 :
210 : This function returns the url referenced
211 : by the view.
212 :
213 : @par Example
214 : @code
215 : url u( "?key=value" );
216 :
217 : assert( &u.encoded_params().url() == &u );
218 : @endcode
219 :
220 : @par Exception Safety
221 : @code
222 : Throws nothing.
223 : @endcode
224 :
225 : @return A reference to the url.
226 : */
227 : url_base&
228 7 : url() const noexcept
229 : {
230 7 : return *u_;
231 : }
232 :
233 : //--------------------------------------------
234 : //
235 : // Modifiers
236 : //
237 : //--------------------------------------------
238 :
239 : /** Clear the contents of the container
240 :
241 : <br>
242 : All iterators are invalidated.
243 :
244 : @par Effects
245 : @code
246 : this->url().remove_query();
247 : @endcode
248 :
249 : @par Postconditions
250 : @code
251 : this->empty() == true && this->url().has_query() == false
252 : @endcode
253 :
254 : @par Complexity
255 : Constant.
256 :
257 : @par Exception Safety
258 : Throws nothing.
259 : */
260 : void
261 : clear() noexcept;
262 :
263 : //--------------------------------------------
264 :
265 : /** Assign params
266 :
267 : This function replaces the entire
268 : contents of the view with the params
269 : in the <em>initializer-list</em>.
270 :
271 : <br>
272 : All iterators are invalidated.
273 :
274 : @note
275 : The strings referenced by the inputs
276 : must not come from the underlying url,
277 : or else the behavior is undefined.
278 :
279 : @par Example
280 : @code
281 : url u;
282 :
283 : u.encoded_params().assign({ { "first", "John" }, { "last", "Doe" } });
284 : @endcode
285 :
286 : @par Complexity
287 : Linear in `init.size()`.
288 :
289 : @par Exception Safety
290 : Strong guarantee.
291 : Calls to allocate may throw.
292 : Exceptions thrown on invalid input.
293 :
294 : @throw system_error
295 : `init` contains an invalid percent-encoding.
296 :
297 : @param init The list of params to assign.
298 : */
299 : void
300 : assign(
301 : std::initializer_list<
302 : param_pct_view> init);
303 :
304 : /** Assign params
305 :
306 : This function replaces the entire
307 : contents of the view with the params
308 : in the range.
309 :
310 : <br>
311 : All iterators are invalidated.
312 :
313 : @note
314 : The strings referenced by the inputs
315 : must not come from the underlying url,
316 : or else the behavior is undefined.
317 :
318 : @par Mandates
319 : @code
320 : std::is_convertible< std::iterator_traits< FwdIt >::reference_type, param_pct_view >::value == true
321 : @endcode
322 :
323 : @par Complexity
324 : Linear in the size of the range.
325 :
326 : @par Exception Safety
327 : Strong guarantee.
328 : Calls to allocate may throw.
329 : Exceptions thrown on invalid input.
330 :
331 : @throw system_error
332 : The range contains an invalid percent-encoding.
333 :
334 : @param first The first element to assign.
335 : @param last One past the last element to assign.
336 : */
337 : template<class FwdIt>
338 : void
339 : assign(FwdIt first, FwdIt last);
340 :
341 : //--------------------------------------------
342 :
343 : /** Append params
344 :
345 : This function appends a param to the view.
346 :
347 : <br>
348 : The `end()` iterator is invalidated.
349 :
350 : @par Example
351 : @code
352 : url u;
353 :
354 : u.encoded_params().append( { "first", "John" } );
355 : @endcode
356 :
357 : @par Complexity
358 : Linear in `this->url().encoded_query().size()`.
359 :
360 : @par Exception Safety
361 : Strong guarantee.
362 : Calls to allocate may throw.
363 : Exceptions thrown on invalid input.
364 :
365 : @throw system_error
366 : `p` contains an invalid percent-encoding.
367 :
368 : @return An iterator to the new element.
369 :
370 : @param p The param to append.
371 : */
372 : iterator
373 : append(
374 : param_pct_view const& p);
375 :
376 : /** Append params
377 :
378 : This function appends the params in
379 : an <em>initializer-list</em> to the view.
380 :
381 : <br>
382 : The `end()` iterator is invalidated.
383 :
384 : @par Example
385 : @code
386 : url u;
387 :
388 : u.encoded_params().append({ {"first", "John"}, {"last", "Doe"} });
389 : @endcode
390 :
391 : @par Complexity
392 : Linear in `this->url().encoded_query().size()`.
393 :
394 : @par Exception Safety
395 : Strong guarantee.
396 : Calls to allocate may throw.
397 : Exceptions thrown on invalid input.
398 :
399 : @throw system_error
400 : `init` contains an invalid percent-encoding.
401 :
402 : @return An iterator to the first new element.
403 :
404 : @param init The list of params to append.
405 : */
406 : iterator
407 : append(
408 : std::initializer_list<
409 : param_pct_view> init);
410 :
411 : /** Append params
412 :
413 : This function appends a range of params
414 : to the view.
415 :
416 : <br>
417 : The `end()` iterator is invalidated.
418 :
419 : @note
420 : The strings referenced by the inputs
421 : must not come from the underlying url,
422 : or else the behavior is undefined.
423 :
424 : @par Mandates
425 : @code
426 : std::is_convertible< std::iterator_traits< FwdIt >::reference_type, param_pct_view >::value == true
427 : @endcode
428 :
429 : @par Complexity
430 : Linear in `this->url().encoded_query().size()`.
431 :
432 : @par Exception Safety
433 : Strong guarantee.
434 : Calls to allocate may throw.
435 : Exceptions thrown on invalid input.
436 :
437 : @throw system_error
438 : The range contains an invalid percent-encoding.
439 :
440 : @return An iterator to the first new element.
441 :
442 : @param first The first element to append.
443 : @param last One past the last element to append.
444 : @return An iterator to the first new element.
445 : */
446 : template<class FwdIt>
447 : iterator
448 : append(
449 : FwdIt first, FwdIt last);
450 :
451 : //--------------------------------------------
452 :
453 : /** Insert params
454 :
455 : This function inserts a param
456 : before the specified position.
457 :
458 : <br>
459 : All iterators that are equal to
460 : `before` or come after are invalidated.
461 :
462 : @par Complexity
463 : Linear in `this->url().encoded_query().size()`.
464 :
465 : @par Exception Safety
466 : Strong guarantee.
467 : Calls to allocate may throw.
468 : Exceptions thrown on invalid input.
469 :
470 : @throw system_error
471 : `p` contains an invalid percent-encoding.
472 :
473 : @return An iterator to the inserted
474 : element.
475 :
476 : @param before An iterator before which
477 : the param is inserted. This may
478 : be equal to `end()`.
479 :
480 : @param p The param to insert.
481 : */
482 : iterator
483 : insert(
484 : iterator before,
485 : param_pct_view const& p);
486 :
487 : /** Insert params
488 :
489 : This function inserts the params in
490 : an <em>initializer-list</em> before
491 : the specified position.
492 :
493 : <br>
494 : All iterators that are equal to
495 : `before` or come after are invalidated.
496 :
497 : @note
498 : The strings referenced by the inputs
499 : must not come from the underlying url,
500 : or else the behavior is undefined.
501 :
502 : @par Complexity
503 : Linear in `this->url().encoded_query().size()`.
504 :
505 : @par Exception Safety
506 : Strong guarantee.
507 : Calls to allocate may throw.
508 : Exceptions thrown on invalid input.
509 :
510 : @throw system_error
511 : `init` contains an invalid percent-encoding.
512 :
513 : @return An iterator to the first
514 : element inserted, or `before` if
515 : `init.size() == 0`.
516 :
517 : @param before An iterator before which
518 : the element is inserted. This may
519 : be equal to `end()`.
520 :
521 : @param init The list of params to insert.
522 : */
523 : iterator
524 : insert(
525 : iterator before,
526 : std::initializer_list<
527 : param_pct_view> init);
528 :
529 : /** Insert params
530 :
531 : This function inserts a range of
532 : params before the specified position.
533 :
534 : <br>
535 : All iterators that are equal to
536 : `before` or come after are invalidated.
537 :
538 : @note
539 : The strings referenced by the inputs
540 : must not come from the underlying url,
541 : or else the behavior is undefined.
542 :
543 : @par Mandates
544 : @code
545 : std::is_convertible< std::iterator_traits< FwdIt >::reference_type, param_pct_view >::value == true
546 : @endcode
547 :
548 : @par Complexity
549 : Linear in `this->url().encoded_query().size()`.
550 :
551 : @par Exception Safety
552 : Strong guarantee.
553 : Calls to allocate may throw.
554 : Exceptions thrown on invalid input.
555 :
556 : @throw system_error
557 : The range contains an invalid percent-encoding.
558 :
559 : @return An iterator to the first
560 : element inserted, or `before` if
561 : `first == last`.
562 :
563 : @param before An iterator before which
564 : the element is inserted. This may
565 : be equal to `end()`.
566 :
567 : @param first The first element to insert.
568 : @param last One past the last element to insert.
569 : @return An iterator to the first element inserted.
570 : */
571 : template<class FwdIt>
572 : iterator
573 : insert(
574 : iterator before,
575 : FwdIt first,
576 : FwdIt last);
577 :
578 : //--------------------------------------------
579 :
580 : /** Erase params
581 :
582 : This function removes an element from
583 : the container.
584 :
585 : <br>
586 : All iterators that are equal to
587 : `pos` or come after are invalidated.
588 :
589 : @par Example
590 : @code
591 : url u( "?first=John&last=Doe" );
592 :
593 : params_encoded_ref::iterator it = u.encoded_params().erase( u.encoded_params().begin() );
594 :
595 : assert( u.encoded_query() == "last=Doe" );
596 : @endcode
597 :
598 : @par Complexity
599 : Linear in `this->url().encoded_query().size()`.
600 :
601 : @par Exception Safety
602 : Throws nothing.
603 :
604 : @return An iterator to one past
605 : the removed element.
606 :
607 : @param pos An iterator to the element.
608 : */
609 : iterator
610 : erase(iterator pos) noexcept;
611 :
612 : /** Erase params
613 :
614 : This function removes a range of params
615 : from the container.
616 :
617 : <br>
618 : All iterators that are equal to
619 : `first` or come after are invalidated.
620 :
621 : @par Complexity
622 : Linear in `this->url().encoded_query().size()`.
623 :
624 : @par Exception Safety
625 : Throws nothing.
626 :
627 : @return An iterator to one past
628 : the removed range.
629 :
630 : @param first The first element to remove.
631 : @param last One past the last element to remove.
632 : @return An iterator to one past the removed range.
633 : */
634 : iterator
635 : erase(
636 : iterator first,
637 : iterator last) noexcept;
638 :
639 : /** Erase params
640 :
641 : <br>
642 : All iterators are invalidated.
643 :
644 : @par Postconditions
645 : @code
646 : this->count( key, ic ) == 0
647 : @endcode
648 :
649 : @par Complexity
650 : Linear in `this->url().encoded_query().size()`.
651 :
652 : @par Exception Safety
653 : Exceptions thrown on invalid input.
654 :
655 : @throw system_error
656 : `key` contains an invalid percent-encoding.
657 :
658 : @return The number of params removed
659 : from the container.
660 :
661 : @param key The key to match.
662 : By default, a case-sensitive
663 : comparison is used.
664 :
665 : @param ic An optional parameter. If
666 : the value @ref ignore_case is passed
667 : here, the comparison is
668 : case-insensitive.
669 : */
670 : std::size_t
671 : erase(
672 : pct_string_view key,
673 : ignore_case_param ic = {}) noexcept;
674 :
675 : //--------------------------------------------
676 :
677 : /** Replace params
678 :
679 : This function replaces the contents
680 : of the element at `pos` with the
681 : specified param.
682 :
683 : <br>
684 : All iterators that are equal to
685 : `pos` or come after are invalidated.
686 :
687 : @note
688 : The strings passed in must not come
689 : from the element being replaced,
690 : or else the behavior is undefined.
691 :
692 : @par Example
693 : @code
694 : url u( "?first=John&last=Doe" );
695 :
696 : u.encoded_params().replace( u.encoded_params().begin(), { "title", "Mr" });
697 :
698 : assert( u.encoded_query() == "title=Mr&last=Doe" );
699 : @endcode
700 :
701 : @par Complexity
702 : Linear in `this->url().encoded_query().size()`.
703 :
704 : @par Exception Safety
705 : Strong guarantee.
706 : Calls to allocate may throw.
707 : Exceptions thrown on invalid input.
708 :
709 : @throw system_error
710 : `p` contains an invalid percent-encoding.
711 :
712 : @return An iterator to the element.
713 :
714 : @param pos An iterator to the element.
715 :
716 : @param p The param to assign.
717 : */
718 : iterator
719 : replace(
720 : iterator pos,
721 : param_pct_view const& p);
722 :
723 : /** Replace params
724 :
725 : This function replaces a range of
726 : params with the params in an
727 : <em>initializer-list</em>.
728 :
729 : <br>
730 : All iterators that are equal to
731 : `from` or come after are invalidated.
732 :
733 : @note
734 : The strings referenced by the inputs
735 : must not come from the underlying url,
736 : or else the behavior is undefined.
737 :
738 : @par Complexity
739 : Linear in `this->url().encoded_query().size()`.
740 :
741 : @par Exception Safety
742 : Strong guarantee.
743 : Calls to allocate may throw.
744 : Exceptions thrown on invalid input.
745 :
746 : @throw system_error
747 : `init` contains an invalid percent-encoding.
748 :
749 : @return An iterator to the first
750 : element inserted, or one past `to` if
751 : `init.size() == 0`.
752 :
753 : @param from,to The range of params
754 : to replace.
755 :
756 : @param init The list of params to assign.
757 : */
758 : iterator
759 : replace(
760 : iterator from,
761 : iterator to,
762 : std::initializer_list<
763 : param_pct_view> init);
764 :
765 : /** Replace params
766 :
767 : This function replaces a range of
768 : params with a range of params.
769 :
770 : <br>
771 : All iterators that are equal to
772 : `from` or come after are invalidated.
773 :
774 : @note
775 : The strings referenced by the inputs
776 : must not come from the underlying url,
777 : or else the behavior is undefined.
778 :
779 : @par Mandates
780 : @code
781 : std::is_convertible< std::iterator_traits< FwdIt >::reference_type, param_pct_view >::value == true
782 : @endcode
783 :
784 : @par Complexity
785 : Linear in `this->url().encoded_query().size()`.
786 :
787 : @par Exception Safety
788 : Strong guarantee.
789 : Calls to allocate may throw.
790 : Exceptions thrown on invalid input.
791 :
792 : @throw system_error
793 : The range contains an invalid percent-encoding.
794 :
795 : @return An iterator to the first
796 : element inserted, or one past `to` if
797 : `first == last`.
798 :
799 : @param from The first element to replace.
800 : @param to One past the last element to replace.
801 : @param first The first element to insert.
802 : @param last One past the last element to insert.
803 : @return An iterator to the first element inserted, or
804 : one past `to` if `first == last`.
805 : */
806 : template<class FwdIt>
807 : iterator
808 : replace(
809 : iterator from,
810 : iterator to,
811 : FwdIt first,
812 : FwdIt last);
813 :
814 : //--------------------------------------------
815 :
816 : /** Remove the value on an element
817 :
818 : This function removes the value of
819 : an element at the specified position.
820 : After the call returns, `has_value`
821 : for the element is false.
822 :
823 : <br>
824 : All iterators that are equal to
825 : `pos` or come after are invalidated.
826 :
827 : @par Example
828 : @code
829 : url u( "?first=John&last=Doe" );
830 :
831 : u.encoded_params().unset( u.encoded_params().begin() );
832 :
833 : assert( u.encoded_query() == "first&last=Doe" );
834 : @endcode
835 :
836 : @par Complexity
837 : Linear in `this->url().encoded_query().size()`.
838 :
839 : @par Exception Safety
840 : Throws nothing.
841 :
842 : @return An iterator to the element.
843 :
844 : @param pos An iterator to the element.
845 : */
846 : iterator
847 : unset(
848 : iterator pos) noexcept;
849 :
850 : /** Set a value
851 :
852 : This function replaces the value of an
853 : element at the specified position.
854 :
855 : <br>
856 : All iterators that are equal to
857 : `pos` or come after are invalidated.
858 :
859 : @note
860 : The string passed in must not come
861 : from the element being replaced,
862 : or else the behavior is undefined.
863 :
864 : @par Example
865 : @code
866 : url u( "?id=42&id=69" );
867 :
868 : u.encoded_params().set( u.encoded_params().begin(), "none" );
869 :
870 : assert( u.encoded_query() == "id=none&id=69" );
871 : @endcode
872 :
873 : @par Complexity
874 : Linear in `this->url().encoded_query().size()`.
875 :
876 : @par Exception Safety
877 : Strong guarantee.
878 : Calls to allocate may throw.
879 : Exceptions thrown on invalid input.
880 :
881 : @throw system_error
882 : `value` contains an invalid percent-encoding.
883 :
884 : @return An iterator to the element.
885 :
886 : @param pos An iterator to the element.
887 :
888 : @param value The value to assign. The
889 : empty string still counts as a value.
890 : That is, `has_value` for the element
891 : is true.
892 : */
893 : iterator
894 : set(
895 : iterator pos,
896 : pct_string_view value);
897 :
898 : /** Set a value
899 :
900 : This function performs one of two
901 : actions depending on the value of
902 : `this->contains( key, ic )`.
903 :
904 : @li If key is contained in the view
905 : then one of the matching params has
906 : its value changed to the specified value.
907 : The remaining params with a matching
908 : key are erased. Otherwise,
909 :
910 : @li If `key` is not contained in the
911 : view, then the function apppends the
912 : param `{ key, value }`.
913 :
914 : <br>
915 : All iterators are invalidated.
916 :
917 : @note
918 : The strings passed in must not come
919 : from the element being replaced,
920 : or else the behavior is undefined.
921 :
922 : @par Example
923 : @code
924 : url u( "?id=42&id=69" );
925 :
926 : u.encoded_params().set( "id", "none" );
927 :
928 : assert( u.encoded_params().count( "id" ) == 1 );
929 : @endcode
930 :
931 : @par Postconditions
932 : @code
933 : this->count( key, ic ) == 1 && this->find( key, ic )->value == value
934 : @endcode
935 :
936 : @par Complexity
937 : Linear in `this->url().encoded_query().size()`.
938 :
939 : @par Exception Safety
940 : Strong guarantee.
941 : Calls to allocate may throw.
942 : Exceptions thrown on invalid input.
943 :
944 : @throw system_error
945 : `key` or `value` contain an invalid
946 : percent-encoding.
947 :
948 : @return An iterator to the appended
949 : or modified element.
950 :
951 : @param key The key to match.
952 : By default, a case-sensitive
953 : comparison is used.
954 :
955 : @param value The value to assign. The
956 : empty string still counts as a value.
957 : That is, `has_value` for the element
958 : is true.
959 :
960 : @param ic An optional parameter. If
961 : the value @ref ignore_case is passed
962 : here, the comparison is
963 : case-insensitive.
964 : */
965 : iterator
966 : set(
967 : pct_string_view key,
968 : pct_string_view value,
969 : ignore_case_param ic = {});
970 :
971 : private:
972 : template<class FwdIt>
973 : void
974 : assign(FwdIt first, FwdIt last,
975 : std::forward_iterator_tag);
976 :
977 : // Doxygen cannot render ` = delete`
978 : template<class FwdIt>
979 : void
980 : assign(FwdIt first, FwdIt last,
981 : std::input_iterator_tag) = delete;
982 :
983 : template<class FwdIt>
984 : iterator
985 : insert(
986 : iterator before,
987 : FwdIt first,
988 : FwdIt last,
989 : std::forward_iterator_tag);
990 :
991 : // Doxygen cannot render ` = delete`
992 : template<class FwdIt>
993 : iterator
994 : insert(
995 : iterator before,
996 : FwdIt first,
997 : FwdIt last,
998 : std::input_iterator_tag) = delete;
999 : };
1000 :
1001 : } // urls
1002 : } // boost
1003 :
1004 : // This is in <boost/url/url_base.hpp>
1005 : //
1006 : // #include <boost/url/impl/params_encoded_ref.hpp>
1007 :
1008 : #endif
|