src/segments_ref.cpp

100.0% Lines (52/52) 100.0% Functions (16/16) 83.3% Branches (5/6)
src/segments_ref.cpp
Line Branch Hits 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_ref.hpp>
14 #include <boost/url/url.hpp>
15 #include <boost/url/detail/path.hpp>
16 #include <boost/assert.hpp>
17
18 namespace boost {
19 namespace urls {
20
21 //------------------------------------------------
22 //
23 // Special Members
24 //
25 //------------------------------------------------
26
27 267 segments_ref::
28 segments_ref(
29 267 url_base& u) noexcept
30 : segments_base(
31 534 detail::path_ref(u.impl_))
32 267 , u_(&u)
33 {
34 267 }
35
36 1 segments_ref::
37 operator
38 segments_view() const noexcept
39 {
40 1 return segments_view(ref_);
41 }
42
43 segments_ref&
44 1 segments_ref::
45 operator=(segments_ref const& other)
46 {
47
1/2
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
1 if (!ref_.alias_of(other.ref_))
48 1 assign(other.begin(), other.end());
49 1 return *this;
50 }
51
52 segments_ref&
53 1 segments_ref::
54 operator=(segments_view const& other)
55 {
56 1 assign(other.begin(), other.end());
57 1 return *this;
58 }
59
60 segments_ref&
61 17 segments_ref::
62 operator=(std::initializer_list<
63 core::string_view> init)
64 {
65 17 assign(init.begin(), init.end());
66 17 return *this;
67 }
68
69 //------------------------------------------------
70 //
71 // Modifiers
72 //
73 //------------------------------------------------
74
75 void
76 9 segments_ref::
77 clear() noexcept
78 {
79 9 erase(begin(), end());
80 9 }
81
82 void
83 8 segments_ref::
84 assign(std::initializer_list<
85 core::string_view> init)
86 {
87 8 assign(init.begin(), init.end());
88 8 }
89
90 auto
91 46 segments_ref::
92 insert(
93 iterator before,
94 core::string_view s) ->
95 iterator
96 {
97
1/1
✓ Branch 1 taken 46 times.
46 return u_->edit_segments(
98 before.it_,
99 before.it_,
100 92 detail::segment_iter(s));
101 }
102
103 auto
104 16 segments_ref::
105 insert(
106 iterator before,
107 std::initializer_list<
108 core::string_view> init) ->
109 iterator
110 {
111 16 return insert(
112 before,
113 init.begin(),
114 16 init.end());
115 }
116
117 auto
118 37 segments_ref::
119 erase(
120 iterator first,
121 iterator last) noexcept ->
122 iterator
123 {
124 37 core::string_view s;
125 37 return u_->edit_segments(
126 first.it_,
127 last.it_,
128 74 detail::make_segments_encoded_iter(
129 37 &s, &s));
130 }
131
132 auto
133 16 segments_ref::
134 replace(
135 iterator pos,
136 core::string_view s) ->
137 iterator
138 {
139 48 return u_->edit_segments(
140 pos.it_,
141
1/1
✓ Branch 1 taken 16 times.
16 std::next(pos).it_,
142 32 detail::segment_iter(s));
143 }
144
145 auto
146 13 segments_ref::
147 replace(
148 iterator from,
149 iterator to,
150 core::string_view s) ->
151 iterator
152 {
153
1/1
✓ Branch 1 taken 13 times.
13 return u_->edit_segments(
154 from.it_,
155 to.it_,
156 26 detail::segment_iter(s));
157 }
158
159 auto
160 7 segments_ref::
161 replace(
162 iterator from,
163 iterator to,
164 std::initializer_list<
165 core::string_view> init) ->
166 iterator
167 {
168 7 return replace(
169 from,
170 to,
171 init.begin(),
172 7 init.end());
173 }
174
175 auto
176 22 segments_ref::
177 erase(
178 iterator pos) noexcept ->
179 iterator
180 {
181 22 return erase(pos, std::next(pos));
182 }
183
184 void
185 14 segments_ref::
186 push_back(
187 core::string_view s)
188 {
189
1/1
✓ Branch 2 taken 14 times.
14 insert(end(), s);
190 14 }
191
192 void
193 7 segments_ref::
194 pop_back() noexcept
195 {
196 14 erase(std::prev(end()));
197 7 }
198
199 } // urls
200 } // boost
201
202