Line data Source code
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 : #ifndef BOOST_URL_DETAIL_PARAMS_ITER_IMPL_HPP 11 : #define BOOST_URL_DETAIL_PARAMS_ITER_IMPL_HPP 12 : 13 : #include <boost/url/param.hpp> 14 : #include <boost/url/detail/parts_base.hpp> 15 : #include <boost/url/detail/url_impl.hpp> 16 : #include <boost/assert.hpp> 17 : 18 : namespace boost { 19 : namespace urls { 20 : namespace detail { 21 : 22 : struct BOOST_URL_DECL params_iter_impl 23 : : parts_base 24 : { 25 : query_ref ref; 26 : std::size_t index = 0; 27 : std::size_t pos; 28 : std::size_t nk; 29 : std::size_t nv; 30 : std::size_t dk; 31 : std::size_t dv; 32 : 33 8 : params_iter_impl() = default; 34 : params_iter_impl( 35 : params_iter_impl const&) = default; 36 : params_iter_impl& operator=( 37 : params_iter_impl const&) = default; 38 : 39 : // begin 40 : params_iter_impl( 41 : query_ref const&) noexcept; 42 : 43 : // end 44 : params_iter_impl( 45 : query_ref const&, 46 : int) noexcept; 47 : 48 : // at index 49 : params_iter_impl( 50 : query_ref const&, 51 : std::size_t, 52 : std::size_t) noexcept; 53 : void setup() noexcept; 54 : void increment() noexcept; 55 : void decrement() noexcept; 56 : param_pct_view 57 : dereference() const noexcept; 58 : pct_string_view key() const noexcept; 59 : 60 : auto 61 17 : next() const noexcept -> 62 : params_iter_impl 63 : { 64 17 : auto next = *this; 65 17 : next.increment(); 66 17 : return next; 67 : } 68 : 69 : bool 70 2447 : equal( 71 : params_iter_impl const& 72 : other) const noexcept 73 : { 74 : // different containers 75 2447 : BOOST_ASSERT(ref.alias_of(other.ref)); 76 2447 : return index == other.index; 77 : } 78 : }; 79 : 80 : } // detail 81 : } // urls 82 : } // boost 83 : 84 : #endif