7template < prototype_
character CHARACTER >
8::string_base < const CHARACTER* > operator + (
9 const ::range < const CHARACTER* >& range1,
10 const ::range < const CHARACTER* >& range2)
13 return { range1, range2 };
19template < prototype_
character CHARACTER,
character_count n >
20::string_base < const CHARACTER* > operator + (
21 const ::range < const CHARACTER* >& range1,
25 return { range1, ::as_string_literal <CHARACTER,n>(s) };
30template <
typename ITERATOR_TYPE >
31const_string_range < ITERATOR_TYPE >::THIS_RANGE const_string_range < ITERATOR_TYPE >::right(character_count count)
const
41 character_count nLength = this->size();
50 return _begin_set(this->begin() + nLength - count);
56template <
typename ITERATOR_TYPE >
57const_string_range < ITERATOR_TYPE > const_string_range < ITERATOR_TYPE >::left(character_count count)
const
68 character_count nLength = this->size();
77 return _end_set(this->begin() + count);
83template <
typename ITERATOR_TYPE >
84const_string_range < ITERATOR_TYPE > const_string_range < ITERATOR_TYPE >::left_including_any_character_in(
const SCOPED_STRING& scopedstrCharacters)
const
87 auto pbegin = this->skip_any_character_in(scopedstrCharacters);
89 return _begin_set(pbegin);
95template <
typename ITERATOR_TYPE >
96const_string_range < ITERATOR_TYPE > const_string_range < ITERATOR_TYPE >::left_skipping_any_character_in(
const SCOPED_STRING& scopedstrCharacters)
const
99 auto pbegin = this->skip_any_character_in(scopedstrCharacters);
101 return _begin_set(pbegin);
175template <
typename ITERATOR_TYPE >
176bool const_string_range < ITERATOR_TYPE >::xml_is_comment()
const
179 return this->size() > 3 && this->m_begin[0] ==
'<' && this->m_begin[1] ==
'!' && this->m_begin[2] ==
'-';
194template <
typename ITERATOR_TYPE >
198 auto rangeCompare = scopedstr();
200 ::std::strong_ordering order = ::std::strong_ordering::equal;
202 const CHARACTER* prev_escape =
nullptr;
206 while (r.has_character() && *r.m_begin && rangeCompare.has_character())
209 if (escape != 0 && *r.m_begin == escape && prev_escape ==
nullptr)
212 prev_escape = r.m_begin;
218 prev_escape =
nullptr;
220 order = unicode_to_lower_case(unicode_index(r.m_begin)) <=> unicode_to_lower_case(unicode_index(rangeCompare.m_begin));
229 rangeCompare.m_begin++;
242template <
typename ITERATOR_TYPE >
243typename const_string_range < ITERATOR_TYPE >::THIS_RANGE const_string_range < ITERATOR_TYPE >::get_utf8_char()
const
246 auto pszStart = this->m_begin;
248 auto pszNext = unicode_next(pszStart);
250 return { pszStart, minimum(pszNext, this->m_end) };
::std::strong_ordering escape_case_insensitive_count_order(const ::scoped_string &scopedstr, ::i32 escape) const
Definition _impl_const_string_range.h:195