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_IMPL_PARAMS_BASE_HPP
12 : #define BOOST_URL_IMPL_PARAMS_BASE_HPP
13 :
14 : #include <boost/url/detail/params_iter_impl.hpp>
15 : #include <iterator>
16 :
17 : namespace boost {
18 : namespace urls {
19 :
20 : //------------------------------------------------
21 :
22 : class BOOST_URL_DECL params_base::iterator
23 : {
24 : detail::params_iter_impl it_;
25 : bool space_as_plus_ = true;
26 :
27 : friend class params_base;
28 : friend class params_ref;
29 :
30 : iterator(
31 : detail::query_ref const& ref,
32 : encoding_opts opt) noexcept;
33 :
34 : iterator(
35 : detail::query_ref const& impl,
36 : encoding_opts opt,
37 : int) noexcept;
38 :
39 173 : iterator(
40 : detail::params_iter_impl const& it,
41 : encoding_opts opt) noexcept
42 173 : : it_(it)
43 173 : , space_as_plus_(opt.space_as_plus)
44 : {
45 173 : }
46 :
47 : public:
48 : using value_type = params_base::value_type;
49 : using reference = params_base::reference;
50 : using pointer = reference;
51 : using difference_type =
52 : params_base::difference_type;
53 : using iterator_category =
54 : std::bidirectional_iterator_tag;
55 :
56 4 : iterator() = default;
57 : iterator(iterator const&) = default;
58 : iterator& operator=(
59 : iterator const&) noexcept = default;
60 :
61 : iterator&
62 805 : operator++() noexcept
63 : {
64 805 : it_.increment();
65 805 : return *this;
66 : }
67 :
68 : iterator
69 349 : operator++(int) noexcept
70 : {
71 349 : auto tmp = *this;
72 349 : ++*this;
73 349 : return tmp;
74 : }
75 :
76 : iterator&
77 694 : operator--() noexcept
78 : {
79 694 : it_.decrement();
80 694 : return *this;
81 : }
82 :
83 : iterator
84 347 : operator--(int) noexcept
85 : {
86 347 : auto tmp = *this;
87 347 : --*this;
88 347 : return tmp;
89 : }
90 :
91 : reference
92 : operator*() const;
93 :
94 : // the return value is too expensive
95 : pointer operator->() const = delete;
96 :
97 : bool
98 730 : operator==(
99 : iterator const& other) const noexcept
100 : {
101 730 : return it_.equal(other.it_);
102 : }
103 :
104 : bool
105 89 : operator!=(
106 : iterator const& other) const noexcept
107 : {
108 89 : return ! it_.equal(other.it_);
109 : }
110 : };
111 :
112 :
113 : } // urls
114 : } // boost
115 :
116 : #endif
|