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
|