19#if __cplusplus >= 201703L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
20# include <string_view>
32 template <
typename CharT,
typename Traits = std::
char_traits<CharT>>
class basic_string_view
62#if __cplusplus >= 201703L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
64 : m_size(other.size()), m_data(other.data())
70 m_data = other->data();
71 m_size = other->size();
106 return *(this->m_data +
pos);
112 return *(this->m_data +
pos);
118 return *this->m_data;
124 return *(this->m_data + this->m_size - 1);
165 int ret = traits_type::compare(this->m_data,
s.m_data,
compareLen);
168 ret = _s_compare(this->m_size,
s.m_size);
202 return this->
substr(0, other.size()) == other;
207 return !this->
empty() && traits_type::eq(this->
front(),
c);
217 return this->m_size >= other.m_size && this->
compare(this->m_size - other.m_size,
npos, other) == 0;
222 return !this->
empty() && traits_type::eq(this->
back(),
c);
230 return this->
find(s.m_data,
pos,
s.m_size);
239 const CharT *
r = Traits::find(m_data +
pos, m_size -
pos,
c);
264 const CharT *
r = _s_search_substr(m_data +
pos, m_data + m_size,
s,
s +
n);
266 if (
r == m_data + m_size)
275 return this->
find(s,
pos, traits_type::length(
s));
280 if (
s.m_size && !
s.m_data)
305 if (Traits::eq(*--
ptr,
c))
320 pos = (std::min)(
pos, m_size);
321 if (
n < m_size -
pos)
329 const CharT *
r = _s_find_end(m_data, m_data +
pos,
s,
s +
n);
330 if (
n > 0 &&
r == m_data +
pos)
339 return this->
rfind(
s,
pos, traits_type::length(
s));
351 if (
pos >= m_size || !
n || !
s)
356 const CharT *
r = _s_find_first_of_ce(m_data +
pos, m_data + m_size,
s,
s +
n);
358 if (
r == m_data + m_size)
383 if (!
n ||
s ==
nullptr)
416 if (
s.m_size && !
s.m_data)
425 if (!m_data ||
pos >= m_size)
433 if (!Traits::eq(*
ptr,
c))
444 if (
n &&
s ==
nullptr)
449 if (m_data ==
nullptr ||
pos >= m_size)
457 if (Traits::find(
s,
n, *
ptr) == 0)
473 if (
s.m_size && !
s.m_data)
493 if (!Traits::eq(*--
ptr,
c))
519 if (Traits::find(
s,
n, *--
ptr) == 0)
537 if (
diff > (std::numeric_limits<int>::max)())
539 return (std::numeric_limits<int>::max)();
542 if (
diff < (std::numeric_limits<int>::min)())
544 return (std::numeric_limits<int>::min)();
547 return static_cast<int>(
diff);
550 static const CharT *_s_search_substr(
591 static const CharT *_s_find_end(
632 if (!Traits::eq(*
m1, *
m2))
641 static const CharT *_s_find_first_of_ce(
665 template <
class CharT,
class Traits>
673 template <
class CharT,
class Traits>
681 template <
class CharT,
class Traits>
690 template <
class CharT,
class Traits>
698 template <
class CharT,
class Traits>
706 template <
class CharT,
class Traits>
715 template <
class CharT,
class Traits>
720 return lhs.compare(
rhs) < 0;
723 template <
class CharT,
class Traits>
728 return lhs.compare(
rhs) < 0;
731 template <
class CharT,
class Traits>
736 return lhs.compare(
rhs) < 0;
740 template <
class CharT,
class Traits>
745 return lhs.compare(
rhs) > 0;
748 template <
class CharT,
class Traits>
753 return lhs.compare(
rhs) > 0;
756 template <
class CharT,
class Traits>
761 return lhs.compare(
rhs) > 0;
765 template <
class CharT,
class Traits>
770 return lhs.compare(
rhs) <= 0;
773 template <
class CharT,
class Traits>
778 return lhs.compare(
rhs) <= 0;
781 template <
class CharT,
class Traits>
786 return lhs.compare(
rhs) <= 0;
790 template <
class CharT,
class Traits>
795 return lhs.compare(
rhs) >= 0;
798 template <
class CharT,
class Traits>
803 return lhs.compare(
rhs) >= 0;
806 template <
class CharT,
class Traits>
811 return lhs.compare(
rhs) >= 0;
819 inline namespace literals
821 inline namespace string_view_literals
823#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ <= 8)
825# define OPERATOR_LITERAL_SV operator"" _sv
828# define OPERATOR_LITERAL_SV operator""_sv
851#undef OPERATOR_LITERAL_SV
863 template <
class CharT,
class Traits>
struct hash<
Aws::Crt::basic_string_view<CharT, Traits>>
868 template <
class CharT,
class Traits>
869 size_t hash<Aws::Crt::basic_string_view<CharT, Traits>>::operator()(
872 auto str = std::basic_string<CharT, Traits>(val.data(), val.size());
873 return std::hash<std::basic_string<CharT, Traits>>{}(str);
#define OPERATOR_LITERAL_SV
Definition StringView.h:828
Definition StringView.h:33
constexpr const_iterator begin() const noexcept
Definition StringView.h:77
constexpr size_type find(const CharT *s, size_type pos=0) const noexcept
Definition StringView.h:273
constexpr size_type rfind(const CharT *s, size_type pos=npos) const noexcept
Definition StringView.h:337
size_type find(CharT c, size_type pos=0) const noexcept
Definition StringView.h:233
size_type find_first_not_of(CharT c, size_type pos=0) const noexcept
Definition StringView.h:423
constexpr int compare(size_type pos1, size_type n1, const CharT *s) const
Definition StringView.h:190
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:173
constexpr int compare(size_type pos1, size_type n1, const CharT *s, size_type n2) const noexcept(false)
Definition StringView.h:195
constexpr const_iterator end() const noexcept
Definition StringView.h:79
value_type * pointer
Definition StringView.h:38
Traits traits_type
Definition StringView.h:36
constexpr basic_string_view(const CharT *s, size_type count) noexcept
Definition StringView.h:58
void remove_suffix(size_type n) noexcept
Definition StringView.h:137
constexpr size_type find(const basic_string_view &s, size_type pos=0) const noexcept
Definition StringView.h:228
constexpr size_type find_first_of(basic_string_view s, size_type pos=0) const noexcept
Definition StringView.h:342
constexpr const_iterator cbegin() const noexcept
Definition StringView.h:81
const_reference front() const noexcept
Definition StringView.h:115
size_type copy(CharT *s, size_type n, size_type pos=0) const
Definition StringView.h:147
constexpr const_reverse_iterator rend() const noexcept
Definition StringView.h:87
size_type find_last_of(const CharT *s, size_type pos, size_type n) const noexcept
Definition StringView.h:381
const_reference operator[](size_type pos) const noexcept
Definition StringView.h:103
constexpr size_type find_last_of(basic_string_view s, size_type pos=npos) const noexcept
Definition StringView.h:371
constexpr const_reverse_iterator crbegin() const noexcept
Definition StringView.h:89
ptrdiff_t difference_type
Definition StringView.h:47
size_t size_type
Definition StringView.h:46
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition StringView.h:44
constexpr const_reverse_iterator crend() const noexcept
Definition StringView.h:91
constexpr bool ends_with(const CharT *s) const noexcept
Definition StringView.h:225
value_type & reference
Definition StringView.h:40
size_type find_first_not_of(const CharT *s, size_type pos, size_type n) const noexcept
Definition StringView.h:442
size_type rfind(const CharT *s, size_type pos, size_type n) const noexcept
Definition StringView.h:313
constexpr size_type find_first_not_of(const CharT *s, size_type pos=0) const noexcept
Definition StringView.h:466
constexpr const_iterator cend() const noexcept
Definition StringView.h:83
const_reference at(size_type pos) const
Definition StringView.h:109
static constexpr size_type npos
Definition StringView.h:48
constexpr bool empty() const noexcept
Definition StringView.h:99
constexpr size_type size() const noexcept
Definition StringView.h:93
constexpr basic_string_view(const CharT *s) noexcept
Definition StringView.h:56
const_reverse_iterator reverse_iterator
Definition StringView.h:45
size_type find_last_not_of(CharT c, size_type pos=npos) const noexcept
Definition StringView.h:480
basic_string_view & operator=(const basic_string_view &) noexcept=default
constexpr bool ends_with(const basic_string_view &other) const noexcept
Definition StringView.h:215
constexpr bool starts_with(const CharT *s) const noexcept
Definition StringView.h:210
size_type find(const CharT *s, size_type pos, size_type n) const noexcept
Definition StringView.h:247
size_type find_last_not_of(const CharT *s, size_type pos, size_type n) const noexcept
Definition StringView.h:501
void remove_prefix(size_type n) noexcept
Definition StringView.h:130
size_type find_last_not_of(basic_string_view s, size_type pos=npos) const noexcept
Definition StringView.h:471
size_type find_first_not_of(basic_string_view s, size_type pos=0) const noexcept
Definition StringView.h:414
basic_string_view substr(size_type pos=0, size_type n=npos) const noexcept(false)
Definition StringView.h:155
size_type rfind(basic_string_view s, size_type pos=npos) const noexcept
Definition StringView.h:278
int compare(const basic_string_view &s) const noexcept
Definition StringView.h:162
constexpr bool ends_with(CharT c) const noexcept
Definition StringView.h:220
constexpr int compare(size_type pos1, size_type n1, const basic_string_view &s, size_type pos2, size_type n2) const
Definition StringView.h:178
const_iterator iterator
Definition StringView.h:43
constexpr size_type find_last_of(const CharT *s, size_type pos=npos) const noexcept
Definition StringView.h:409
constexpr const_reverse_iterator rbegin() const noexcept
Definition StringView.h:85
constexpr size_type max_size() const noexcept
Definition StringView.h:97
constexpr size_type find_last_of(CharT c, size_type pos=npos) const noexcept
Definition StringView.h:376
constexpr size_type find_first_of(const CharT *s, size_type pos=0) const noexcept
Definition StringView.h:366
size_type rfind(CharT c, size_type pos=npos) const noexcept
Definition StringView.h:287
const value_type & const_reference
Definition StringView.h:41
constexpr bool starts_with(CharT c) const noexcept
Definition StringView.h:205
const value_type * const_pointer
Definition StringView.h:39
constexpr size_type find_last_not_of(const CharT *s, size_type pos=npos) const noexcept
Definition StringView.h:527
const value_type * const_iterator
Definition StringView.h:42
constexpr basic_string_view() noexcept
Definition StringView.h:52
CharT value_type
Definition StringView.h:37
constexpr size_type find_first_of(CharT c, size_type pos=0) const noexcept
Definition StringView.h:347
const_reference back() const noexcept
Definition StringView.h:121
constexpr const_pointer data() const noexcept
Definition StringView.h:127
constexpr size_type length() const noexcept
Definition StringView.h:95
constexpr int compare(const CharT *s) const noexcept
Definition StringView.h:188
void swap(basic_string_view &other) noexcept
Definition StringView.h:139
constexpr bool starts_with(const basic_string_view &other) const noexcept
Definition StringView.h:200
size_type find_first_of(const CharT *s, size_type pos, size_type n) const noexcept
Definition StringView.h:349
basic_string_view< char32_t > u32string_view
Definition StringView.h:816
basic_string_view< char > string_view
Definition StringView.h:814
constexpr bool operator<=(const basic_string_view< CharT, Traits > &lhs, const basic_string_view< CharT, Traits > &rhs) noexcept
Definition StringView.h:766
bool operator<(const basic_string_view< CharT, Traits > &lhs, const basic_string_view< CharT, Traits > &rhs) noexcept
Definition StringView.h:716
constexpr bool operator>=(const basic_string_view< CharT, Traits > &lhs, const basic_string_view< CharT, Traits > &rhs) noexcept
Definition StringView.h:791
constexpr bool operator>(const basic_string_view< CharT, Traits > &lhs, const basic_string_view< CharT, Traits > &rhs) noexcept
Definition StringView.h:741
basic_string_view< wchar_t > wstring_view
Definition StringView.h:817
std::unique_ptr< T, std::function< void(T *)> > ScopedResource
Definition Types.h:163
basic_string_view< char16_t > u16string_view
Definition StringView.h:815
bool operator==(const basic_string_view< CharT, Traits > &lhs, const basic_string_view< CharT, Traits > &rhs) noexcept
Definition StringView.h:666
bool operator!=(const basic_string_view< CharT, Traits > &lhs, const basic_string_view< CharT, Traits > &rhs) noexcept
Definition StringView.h:691
Definition Allocator.h:11
Definition StringView.h:862