18#if __cplusplus >= 201703L || (defined(_MSC_LANG) && _MSC_LANG >= 201703L)
19# include <string_view>
26 template <
typename CharT,
typename Traits = std::
char_traits<CharT>>
class basic_string_view
56#if __cplusplus >= 201703L || (defined(_MSC_LANG) && _MSC_LANG >= 201703L)
57 constexpr basic_string_view(
const std::basic_string_view<CharT, Traits> &other) noexcept
58 : m_size(other.size()), m_data(other.data())
64 m_data = other->data();
65 m_size = other->size();
91 constexpr size_type max_size() const noexcept {
return (std::numeric_limits<size_type>::max)(); }
93 constexpr bool empty() const noexcept {
return this->m_size == 0; }
100 return *(this->m_data + pos);
105 assert(pos < m_size);
106 return *(this->m_data + pos);
112 return *this->m_data;
118 return *(this->m_data + this->m_size - 1);
126 assert(this->m_size >=
n);
143 assert(pos <=
size());
144 const size_type copyLen = (std::min)(
n, m_size - pos);
151 assert(pos <=
size());
152 const size_type copyLen = (std::min)(
n, m_size - pos);
158 const size_type compareLen = (std::min)(this->m_size, s.m_size);
159 int ret = traits_type::compare(this->m_data, s.m_data, compareLen);
162 ret = _s_compare(this->m_size, s.m_size);
196 return this->
substr(0, other.size()) == other;
201 return !this->
empty() && traits_type::eq(this->
front(), c);
211 return this->m_size >= other.m_size && this->
compare(this->m_size - other.m_size,
npos, other) == 0;
216 return !this->
empty() && traits_type::eq(this->
back(), c);
224 return this->
find(s.m_data, pos, s.m_size);
233 const CharT *r = Traits::find(m_data + pos, m_size - pos, c);
238 return static_cast<size_type>(r - m_data);
258 const CharT *r = _s_search_substr(m_data + pos, m_data + m_size, s, s +
n);
260 if (r == m_data + m_size)
264 return static_cast<size_type>(r - m_data);
274 if (s.m_size && !s.m_data)
278 return this->
rfind(s.m_data, pos, s.m_size);
297 for (
const CharT *ptr = m_data + pos; ptr != m_data;)
299 if (Traits::eq(*--ptr, c))
301 return static_cast<size_type>(ptr - m_data);
314 pos = (std::min)(pos, m_size);
315 if (
n < m_size - pos)
323 const CharT *r = _s_find_end(m_data, m_data + pos, s, s +
n);
324 if (
n > 0 && r == m_data + pos)
328 return static_cast<size_type>(r - m_data);
345 if (pos >= m_size || !
n || !s)
350 const CharT *r = _s_find_first_of_ce(m_data + pos, m_data + m_size, s, s +
n);
352 if (r == m_data + m_size)
357 return static_cast<size_type>(r - m_data);
372 return this->
rfind(c, pos);
377 if (!
n || s ==
nullptr)
391 for (
const CharT *ptr = m_data + pos; ptr != m_data;)
393 const CharT *r = Traits::find(s,
n, *--ptr);
396 return static_cast<size_type>(ptr - m_data);
410 if (s.m_size && !s.m_data)
419 if (!m_data || pos >= m_size)
424 const CharT *pend = m_data + m_size;
425 for (
const CharT *ptr = m_data + pos; ptr != pend; ++ptr)
427 if (!Traits::eq(*ptr, c))
429 return static_cast<size_type>(ptr - m_data);
438 if (
n && s ==
nullptr)
443 if (m_data ==
nullptr || pos >= m_size)
448 const CharT *pend = m_data + m_size;
449 for (
const CharT *ptr = m_data + pos; ptr != pend; ++ptr)
451 if (Traits::find(s,
n, *ptr) == 0)
453 return static_cast<size_type>(ptr - m_data);
467 if (s.m_size && !s.m_data)
485 for (
const CharT *ptr = m_data + pos; ptr != m_data;)
487 if (!Traits::eq(*--ptr, c))
489 return static_cast<size_type>(ptr - m_data);
511 for (
const CharT *ptr = m_data + pos; ptr != m_data;)
513 if (Traits::find(s,
n, *--ptr) == 0)
515 return static_cast<size_type>(ptr - m_data);
531 if (diff > (std::numeric_limits<int>::max)())
533 return (std::numeric_limits<int>::max)();
536 if (diff < (std::numeric_limits<int>::min)())
538 return (std::numeric_limits<int>::min)();
541 return static_cast<int>(diff);
544 static const CharT *_s_search_substr(
550 const ptrdiff_t length2 = last2 - first2;
556 ptrdiff_t length1 = last1 - first1;
557 if (length1 < length2)
564 length1 = last1 - first1;
565 if (length1 < length2)
570 first1 = Traits::find(first1, length1 - length2 + 1, *first2);
576 if (Traits::compare(first1, first2, length2) == 0)
585 static const CharT *_s_find_end(
591 const CharT *r = last1;
605 if (Traits::eq(*first1, *first2))
612 const CharT *m1 = first1;
613 const CharT *m2 = first2;
626 if (!Traits::eq(*m1, *m2))
635 static const CharT *_s_find_first_of_ce(
641 for (; first1 != last1; ++first1)
643 for (
const CharT *ptr = first2; ptr != last2; ++ptr)
645 if (Traits::eq(*first1, *ptr))
659 template <
class CharT,
class Traits>
664 return (lhs.size() != rhs.size()) ? false : lhs.compare(rhs) == 0;
667 template <
class CharT,
class Traits>
672 return (lhs.size() != rhs.size()) ? false : lhs.compare(rhs) == 0;
675 template <
class CharT,
class Traits>
680 return (lhs.size() != rhs.size()) ? false : lhs.compare(rhs) == 0;
684 template <
class CharT,
class Traits>
689 return (lhs.size() != rhs.size()) ?
true : lhs.compare(rhs) != 0;
692 template <
class CharT,
class Traits>
697 return (lhs.size() != rhs.size()) ?
true : lhs.compare(rhs) != 0;
700 template <
class CharT,
class Traits>
705 return (lhs.size() != rhs.size()) ?
true : lhs.compare(rhs) != 0;
709 template <
class CharT,
class Traits>
714 return lhs.compare(rhs) < 0;
717 template <
class CharT,
class Traits>
722 return lhs.compare(rhs) < 0;
725 template <
class CharT,
class Traits>
730 return lhs.compare(rhs) < 0;
734 template <
class CharT,
class Traits>
739 return lhs.compare(rhs) > 0;
742 template <
class CharT,
class Traits>
747 return lhs.compare(rhs) > 0;
750 template <
class CharT,
class Traits>
755 return lhs.compare(rhs) > 0;
759 template <
class CharT,
class Traits>
764 return lhs.compare(rhs) <= 0;
767 template <
class CharT,
class Traits>
772 return lhs.compare(rhs) <= 0;
775 template <
class CharT,
class Traits>
780 return lhs.compare(rhs) <= 0;
784 template <
class CharT,
class Traits>
789 return lhs.compare(rhs) >= 0;
792 template <
class CharT,
class Traits>
797 return lhs.compare(rhs) >= 0;
800 template <
class CharT,
class Traits>
805 return lhs.compare(rhs) >= 0;
813 inline namespace literals
815 inline namespace string_view_literals
847 template <
class CharT,
class Traits>
struct hash<
Aws::Crt::basic_string_view<CharT, Traits>>
852 template <
class CharT,
class Traits>
853 size_t hash<Aws::Crt::basic_string_view<CharT, Traits>>::operator()(
856 auto str = std::basic_string<CharT, Traits>(val.data(), val.size());
857 return std::hash<std::basic_string<CharT, Traits>>()(str);
Definition: StringView.h:27
constexpr const_iterator begin() const noexcept
Definition: StringView.h:71
constexpr size_type find(const CharT *s, size_type pos=0) const noexcept
Definition: StringView.h:267
constexpr size_type rfind(const CharT *s, size_type pos=npos) const noexcept
Definition: StringView.h:331
size_type find(CharT c, size_type pos=0) const noexcept
Definition: StringView.h:227
size_type find_first_not_of(CharT c, size_type pos=0) const noexcept
Definition: StringView.h:417
constexpr int compare(size_type pos1, size_type n1, const CharT *s) const
Definition: StringView.h:184
constexpr basic_string_view(const basic_string_view &) noexcept=default
constexpr int compare(size_type pos1, size_type n1, const basic_string_view &s) const
Definition: StringView.h:167
constexpr int compare(size_type pos1, size_type n1, const CharT *s, size_type n2) const noexcept(false)
Definition: StringView.h:189
constexpr const_iterator end() const noexcept
Definition: StringView.h:73
value_type * pointer
Definition: StringView.h:32
Traits traits_type
Definition: StringView.h:30
constexpr basic_string_view(const CharT *s, size_type length) noexcept
Definition: StringView.h:52
void remove_suffix(size_type n) noexcept
Definition: StringView.h:131
constexpr size_type find(const basic_string_view &s, size_type pos=0) const noexcept
Definition: StringView.h:222
constexpr size_type find_first_of(basic_string_view s, size_type pos=0) const noexcept
Definition: StringView.h:336
constexpr const_iterator cbegin() const noexcept
Definition: StringView.h:75
const_reference front() const noexcept
Definition: StringView.h:109
size_type copy(CharT *s, size_type n, size_type pos=0) const
Definition: StringView.h:141
constexpr const_reverse_iterator rend() const noexcept
Definition: StringView.h:81
size_type find_last_of(const CharT *s, size_type pos, size_type n) const noexcept
Definition: StringView.h:375
const_reference operator[](size_type pos) const noexcept
Definition: StringView.h:97
constexpr size_type find_last_of(basic_string_view s, size_type pos=npos) const noexcept
Definition: StringView.h:365
constexpr const_reverse_iterator crbegin() const noexcept
Definition: StringView.h:83
ptrdiff_t difference_type
Definition: StringView.h:41
size_t size_type
Definition: StringView.h:40
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition: StringView.h:38
constexpr const_reverse_iterator crend() const noexcept
Definition: StringView.h:85
constexpr bool ends_with(const CharT *s) const noexcept
Definition: StringView.h:219
value_type & reference
Definition: StringView.h:34
size_type find_first_not_of(const CharT *s, size_type pos, size_type n) const noexcept
Definition: StringView.h:436
size_type rfind(const CharT *s, size_type pos, size_type n) const noexcept
Definition: StringView.h:307
constexpr size_type find_first_not_of(const CharT *s, size_type pos=0) const noexcept
Definition: StringView.h:460
constexpr const_iterator cend() const noexcept
Definition: StringView.h:77
const_reference at(size_type pos) const
Definition: StringView.h:103
static constexpr size_type npos
Definition: StringView.h:42
constexpr bool empty() const noexcept
Definition: StringView.h:93
constexpr size_type size() const noexcept
Definition: StringView.h:87
constexpr basic_string_view(const CharT *s) noexcept
Definition: StringView.h:50
const_reverse_iterator reverse_iterator
Definition: StringView.h:39
size_type find_last_not_of(CharT c, size_type pos=npos) const noexcept
Definition: StringView.h:474
basic_string_view & operator=(const basic_string_view &) noexcept=default
constexpr bool ends_with(const basic_string_view &other) const noexcept
Definition: StringView.h:209
constexpr bool starts_with(const CharT *s) const noexcept
Definition: StringView.h:204
size_type find(const CharT *s, size_type pos, size_type n) const noexcept
Definition: StringView.h:241
size_type find_last_not_of(const CharT *s, size_type pos, size_type n) const noexcept
Definition: StringView.h:495
void remove_prefix(size_type n) noexcept
Definition: StringView.h:124
size_type find_last_not_of(basic_string_view s, size_type pos=npos) const noexcept
Definition: StringView.h:465
size_type find_first_not_of(basic_string_view s, size_type pos=0) const noexcept
Definition: StringView.h:408
basic_string_view substr(size_type pos=0, size_type n=npos) const noexcept(false)
Definition: StringView.h:149
size_type rfind(basic_string_view s, size_type pos=npos) const noexcept
Definition: StringView.h:272
int compare(const basic_string_view &s) const noexcept
Definition: StringView.h:156
constexpr bool ends_with(CharT c) const noexcept
Definition: StringView.h:214
constexpr int compare(size_type pos1, size_type n1, const basic_string_view &s, size_type pos2, size_type n2) const
Definition: StringView.h:172
const_iterator iterator
Definition: StringView.h:37
constexpr size_type find_last_of(const CharT *s, size_type pos=npos) const noexcept
Definition: StringView.h:403
constexpr const_reverse_iterator rbegin() const noexcept
Definition: StringView.h:79
constexpr size_type max_size() const noexcept
Definition: StringView.h:91
constexpr size_type find_last_of(CharT c, size_type pos=npos) const noexcept
Definition: StringView.h:370
constexpr size_type find_first_of(const CharT *s, size_type pos=0) const noexcept
Definition: StringView.h:360
size_type rfind(CharT c, size_type pos=npos) const noexcept
Definition: StringView.h:281
const value_type & const_reference
Definition: StringView.h:35
constexpr bool starts_with(CharT c) const noexcept
Definition: StringView.h:199
const value_type * const_pointer
Definition: StringView.h:33
constexpr size_type find_last_not_of(const CharT *s, size_type pos=npos) const noexcept
Definition: StringView.h:521
const value_type * const_iterator
Definition: StringView.h:36
constexpr basic_string_view() noexcept
Definition: StringView.h:46
CharT value_type
Definition: StringView.h:31
constexpr size_type find_first_of(CharT c, size_type pos=0) const noexcept
Definition: StringView.h:341
const_reference back() const noexcept
Definition: StringView.h:115
constexpr const_pointer data() const noexcept
Definition: StringView.h:121
constexpr size_type length() const noexcept
Definition: StringView.h:89
constexpr int compare(const CharT *s) const noexcept
Definition: StringView.h:182
void swap(basic_string_view &other) noexcept
Definition: StringView.h:133
constexpr bool starts_with(const basic_string_view &other) const noexcept
Definition: StringView.h:194
size_type find_first_of(const CharT *s, size_type pos, size_type n) const noexcept
Definition: StringView.h:343
basic_string_view< char32_t > u32string_view
Definition: StringView.h:810
basic_string_view< char > string_view
Definition: StringView.h:808
constexpr bool operator<=(const basic_string_view< CharT, Traits > &lhs, const basic_string_view< CharT, Traits > &rhs) noexcept
Definition: StringView.h:760
bool operator<(const basic_string_view< CharT, Traits > &lhs, const basic_string_view< CharT, Traits > &rhs) noexcept
Definition: StringView.h:710
constexpr bool operator>=(const basic_string_view< CharT, Traits > &lhs, const basic_string_view< CharT, Traits > &rhs) noexcept
Definition: StringView.h:785
constexpr bool operator>(const basic_string_view< CharT, Traits > &lhs, const basic_string_view< CharT, Traits > &rhs) noexcept
Definition: StringView.h:735
basic_string_view< wchar_t > wstring_view
Definition: StringView.h:811
basic_string_view< char16_t > u16string_view
Definition: StringView.h:809
bool operator==(const basic_string_view< CharT, Traits > &lhs, const basic_string_view< CharT, Traits > &rhs) noexcept
Definition: StringView.h:660
bool operator!=(const basic_string_view< CharT, Traits > &lhs, const basic_string_view< CharT, Traits > &rhs) noexcept
Definition: StringView.h:685
newitem type
Definition: cJSON.cpp:2724
char const int length
Definition: cJSON.h:181
cJSON * n
Definition: cJSON.cpp:2560
copy
Definition: cJSON.cpp:432
return true
Definition: cJSON.cpp:2306
Definition: StringView.h:846