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 :
12 : #include <boost/url/detail/config.hpp>
13 : #include <boost/url/segments_base.hpp>
14 : #include <ostream>
15 :
16 : namespace boost {
17 : namespace urls {
18 :
19 : auto
20 830 : segments_base::
21 : iterator::
22 : operator*() const ->
23 : reference
24 : {
25 830 : encoding_opts opt;
26 830 : opt.space_as_plus = false;
27 830 : return it_.dereference().decode(opt);
28 : }
29 :
30 493 : segments_base::
31 : iterator::
32 : iterator(
33 493 : detail::path_ref const& ref) noexcept
34 493 : : it_(ref)
35 : {
36 493 : }
37 :
38 385 : segments_base::
39 : iterator::
40 : iterator(
41 : detail::path_ref const& ref,
42 385 : int) noexcept
43 385 : : it_(ref, 0)
44 : {
45 385 : }
46 :
47 : //------------------------------------------------
48 : //
49 : // segments_base
50 : //
51 : //------------------------------------------------
52 :
53 353 : segments_base::
54 : segments_base(
55 353 : detail::path_ref const& ref) noexcept
56 353 : : ref_(ref)
57 : {
58 353 : }
59 :
60 : pct_string_view
61 47 : segments_base::
62 : buffer() const noexcept
63 : {
64 47 : return ref_.buffer();
65 : }
66 :
67 : bool
68 22 : segments_base::
69 : is_absolute() const noexcept
70 : {
71 22 : return ref_.buffer().starts_with('/');
72 : }
73 :
74 : bool
75 81 : segments_base::
76 : empty() const noexcept
77 : {
78 81 : return ref_.nseg() == 0;
79 : }
80 :
81 : std::size_t
82 270 : segments_base::
83 : size() const noexcept
84 : {
85 270 : return ref_.nseg();
86 : }
87 :
88 : auto
89 493 : segments_base::
90 : begin() const noexcept ->
91 : iterator
92 : {
93 493 : return iterator(ref_);
94 : }
95 :
96 : auto
97 385 : segments_base::
98 : end() const noexcept ->
99 : iterator
100 : {
101 385 : return iterator(ref_, 0);
102 : }
103 :
104 : //------------------------------------------------
105 :
106 : std::ostream&
107 15 : operator<<(
108 : std::ostream& os,
109 : segments_base const& ps)
110 : {
111 15 : os << ps.buffer();
112 15 : return os;
113 : }
114 :
115 : } // urls
116 : } // boost
117 :
|