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_DETAIL_SEGMENTS_ITER_IMPL_HPP 12 : #define BOOST_URL_DETAIL_SEGMENTS_ITER_IMPL_HPP 13 : 14 : #include <boost/url/detail/parts_base.hpp> 15 : #include <boost/url/detail/url_impl.hpp> 16 : #include <boost/core/detail/string_view.hpp> 17 : #include <string> 18 : 19 : namespace boost { 20 : namespace urls { 21 : namespace detail { 22 : 23 : struct segments_iter_impl 24 : : private parts_base 25 : { 26 : path_ref ref; 27 : std::size_t pos = 0; 28 : std::size_t next = 0; 29 : std::size_t index = 0; 30 : std::size_t dn = 0; 31 : private: 32 : pct_string_view s_; 33 : public: 34 : 35 : segments_iter_impl() = default; 36 : segments_iter_impl( 37 : segments_iter_impl const&) noexcept = default; 38 : segments_iter_impl& operator=( 39 : segments_iter_impl const&) noexcept = default; 40 : 41 : // begin 42 : segments_iter_impl( 43 : detail::path_ref const&) noexcept; 44 : 45 : // end 46 : segments_iter_impl( 47 : detail::path_ref const&, 48 : int) noexcept; 49 : 50 : // at index 51 : segments_iter_impl( 52 : url_impl const& u_, 53 : std::size_t pos_, 54 : std::size_t i_) noexcept; 55 : 56 : void update() noexcept; 57 : 58 : BOOST_URL_DECL 59 : void 60 : increment() noexcept; 61 : 62 : BOOST_URL_DECL 63 : void 64 : decrement() noexcept; 65 : 66 : pct_string_view 67 4695 : dereference() const noexcept 68 : { 69 4695 : return s_; 70 : } 71 : 72 : bool 73 5080 : equal( 74 : segments_iter_impl const& other) const noexcept 75 : { 76 5080 : BOOST_ASSERT(ref.alias_of(other.ref)); 77 5080 : return index == other.index; 78 : } 79 : }; 80 : 81 : } // detail 82 : } // urls 83 : } // boost 84 : 85 : #endif