acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
_impl_string_range.h
1// From _string_base_impl.h by camilo on 2012-12-18 17:04 <3ThomasBorregaardSorensen!!
2#pragma once
3
4
5
6//template < typename ITERATOR_TYPE >
7//constexpr ::std::strong_ordering const_string_range < ITERATOR_TYPE > ::order(const SCOPED_STRING & range) const noexcept
8//{
9//
10// return this->order(range, ::comparison::comparison < CHARACTER >());
11//
12//}
13//
14
15//template < typename ITERATOR_TYPE >
16//inline ::std::strong_ordering const_string_range < ITERATOR_TYPE > ::case_insensitive_order(const SCOPED_STRING & range) const noexcept
17//{
18//
19// return this->order(range, ::comparison::case_insensitive < CHARACTER >());
20//
21//}
22//
23
24template < typename ITERATOR_TYPE >
25inline ::std::strong_ordering const_string_range < ITERATOR_TYPE > ::collate(const SCOPED_STRING & range) const noexcept
26{
27
28 return range_collate<const CHARACTER *>(*this, range);
29
30}
31
32
33template < typename ITERATOR_TYPE >
34inline ::std::strong_ordering const_string_range < ITERATOR_TYPE > ::case_insensitive_collate(const SCOPED_STRING & range) const noexcept
35{
36
37 return case_insensitive_range_collate<const CHARACTER *>(*this, range);
38
39}
40
41
42//template < typename ITERATOR_TYPE >
43//inline ::std::strong_ordering string_range < ITERATOR_TYPE > ::order(const SCOPED_STRING & range, character_count countRange) const noexcept
44//{
45//
46// return this->order(range.start_count(0, countRange));
47//
48//}
49//
50//
51//template < typename ITERATOR_TYPE >
52//inline ::std::strong_ordering string_range < ITERATOR_TYPE > ::case_insensitive_order(const SCOPED_STRING & range, character_count countRange) const noexcept
53//{
54//
55// return this->case_insensitive_order(range.start_count(0, countRange));
56//
57//}
58//
59//
60//template < typename ITERATOR_TYPE >
61//inline ::std::strong_ordering string_range < ITERATOR_TYPE > ::collate(const SCOPED_STRING & range, character_count countRange) const noexcept
62//{
63//
64// return this->collate(range.start_count(0, countRange));
65//
66//}
67//
68//
69//template < typename ITERATOR_TYPE >
70//inline ::std::strong_ordering string_range < ITERATOR_TYPE > ::case_insensitive_collate(const SCOPED_STRING & range, character_count countRange) const noexcept
71//{
72//
73// return this->case_insensitive_collate(range.start_count(0, countRange));
74//
75//}
76//
77//
78//template < typename ITERATOR_TYPE >
79//inline ::std::strong_ordering string_range < ITERATOR_TYPE > ::order(character_count start, character_count count, const SCOPED_STRING & range) const noexcept
80//{
81//
82// return this->start_count(start, count).order(range);
83//
84//}
85//
86//
87//template < typename ITERATOR_TYPE >
88//inline ::std::strong_ordering string_range < ITERATOR_TYPE > ::case_insensitive_order(character_count start, character_count count, const SCOPED_STRING & range) const noexcept
89//{
90//
91// return this->start_count(start, count).case_insensitive_order(range);
92//
93//}
94//
95//
96//template < typename ITERATOR_TYPE >
97//inline ::std::strong_ordering string_range < ITERATOR_TYPE > ::collate(character_count start, character_count count, const SCOPED_STRING & range) const noexcept
98//{
99//
100// return this->start_count(start, count).collate(range);
101//
102//}
103//
104//
105//template < typename ITERATOR_TYPE >
106//inline ::std::strong_ordering string_range < ITERATOR_TYPE > ::case_insensitive_collate(character_count start, character_count count, const SCOPED_STRING & range) const noexcept
107//{
108//
109// return this->start_count(start, count).case_insensitive_collate(range);
110//
111//}
112//
113//
114//template < typename ITERATOR_TYPE >
115//inline ::std::strong_ordering string_range < ITERATOR_TYPE > ::order(character_count start, character_count count, const SCOPED_STRING & range, character_count startRange, character_count countRange) const noexcept
116//{
117//
118// return this->start_count(start, count).order(range.start_count(startRange, countRange));
119//
120//}
121//
122//
123//template < typename ITERATOR_TYPE >
124//inline ::std::strong_ordering string_range < ITERATOR_TYPE > ::case_insensitive_order(character_count start, character_count count, const SCOPED_STRING & range, character_count startRange, character_count countRange) const noexcept
125//{
126//
127// return this->start_count(start, count).case_insensitive_order(range.start_count(startRange, countRange));
128//
129//}
130//
131//
132//template < typename ITERATOR_TYPE >
133//inline ::std::strong_ordering string_range < ITERATOR_TYPE > ::collate(character_count start, character_count count, const SCOPED_STRING & range, character_count startRange, character_count countRange) const noexcept
134//{
135//
136// return this->start_count(start, count).collate(range.start_count(startRange, countRange));
137//
138//}
139//
140//
141//template < typename ITERATOR_TYPE >
142//inline ::std::strong_ordering string_range < ITERATOR_TYPE > ::case_insensitive_collate(character_count start, character_count count, const SCOPED_STRING & range, character_count startRange, character_count countRange) const noexcept
143//{
144//
145// return this->start_count(start, count).case_insensitive_collate(range.start_count(startRange, countRange));
146//
147//}
148
149
150
151
152
153
154template < typename ITERATOR_TYPE >
155bool const_string_range < ITERATOR_TYPE > ::is_trimmed_empty() const
156{
157
158 auto p = this->m_begin;
159
160 if (::is_null(p))
161 {
162
163 return true;
164
165 }
166
167 auto end = this->m_end;
168
169 while (p < end)
170 {
171
172 if (!unicode_is_whitespace(p))
173 {
174
175 return false;
176
177 }
178
179 p = unicode_next(p);
180
181 }
182
183 return true;
184
185}
186
187
188
189template < typename ITERATOR_TYPE >
190string_range < ITERATOR_TYPE > string_range < ITERATOR_TYPE > ::consume_token_until_any_character_in(const SCOPED_STRING& scopedstrCharacters, bool bReturnSeparator, bool bSkipAnyCharactersIn)
191{
192
193 auto p1 = this->find_first_character_in(scopedstrCharacters);
194
195 if (!p1)
196 {
197
198 auto range = (*this)();
199
200 if (this->m_begin != this->m_end)
201 {
202
203 this->m_begin = this->m_end;
204
205 //this->m_erange = e_range_none;
206
207 //this->m_erange = (enum_range)(this->m_erange & ~e_range_string);
208
209 }
210
211 return range;
212
213 }
214
215 if (bSkipAnyCharactersIn)
216 {
217
218 auto p2 = (*this)(p1).skip_any_character_in(scopedstrCharacters);
219
220 if (bReturnSeparator)
221 {
222
223 auto range = string_range < ITERATOR_TYPE >(this->m_begin, p2);
224
225 this->set_begin(p2);
226
227 return range;
228
229 }
230
231 auto range = string_range < ITERATOR_TYPE >(this->m_begin, p1);
232
233 this->set_begin(p2);
234
235 return range;
236
237 }
238
239 if (bReturnSeparator)
240 {
241
242 auto range = string_range < ITERATOR_TYPE >(this->m_begin, p1 + 1);
243
244 this->set_begin(p1 + 1);
245
246 return range;
247
248 }
249
250 auto range = string_range < ITERATOR_TYPE >(this->m_begin, p1);
251
252 this->set_begin(p1 + 1);
253
254 return range;
255
256}
Definition range.h:223