annotate libcxx/include/string_view @ 174:f935e5e0dbe7

merged
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 12:28:41 +0900
parents 1d019706d866
children 2e18cbf3894f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // -*- C++ -*-
anatofuz
parents:
diff changeset
2 //===------------------------ string_view ---------------------------------===//
anatofuz
parents:
diff changeset
3 //
anatofuz
parents:
diff changeset
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
anatofuz
parents:
diff changeset
5 // See https://llvm.org/LICENSE.txt for license information.
anatofuz
parents:
diff changeset
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
anatofuz
parents:
diff changeset
7 //
anatofuz
parents:
diff changeset
8 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
9
anatofuz
parents:
diff changeset
10 #ifndef _LIBCPP_STRING_VIEW
anatofuz
parents:
diff changeset
11 #define _LIBCPP_STRING_VIEW
anatofuz
parents:
diff changeset
12
anatofuz
parents:
diff changeset
13 /*
anatofuz
parents:
diff changeset
14 string_view synopsis
anatofuz
parents:
diff changeset
15
anatofuz
parents:
diff changeset
16 namespace std {
anatofuz
parents:
diff changeset
17
anatofuz
parents:
diff changeset
18 // 7.2, Class template basic_string_view
anatofuz
parents:
diff changeset
19 template<class charT, class traits = char_traits<charT>>
anatofuz
parents:
diff changeset
20 class basic_string_view;
anatofuz
parents:
diff changeset
21
anatofuz
parents:
diff changeset
22 // 7.9, basic_string_view non-member comparison functions
anatofuz
parents:
diff changeset
23 template<class charT, class traits>
anatofuz
parents:
diff changeset
24 constexpr bool operator==(basic_string_view<charT, traits> x,
anatofuz
parents:
diff changeset
25 basic_string_view<charT, traits> y) noexcept;
anatofuz
parents:
diff changeset
26 template<class charT, class traits>
anatofuz
parents:
diff changeset
27 constexpr bool operator!=(basic_string_view<charT, traits> x,
anatofuz
parents:
diff changeset
28 basic_string_view<charT, traits> y) noexcept;
anatofuz
parents:
diff changeset
29 template<class charT, class traits>
anatofuz
parents:
diff changeset
30 constexpr bool operator< (basic_string_view<charT, traits> x,
anatofuz
parents:
diff changeset
31 basic_string_view<charT, traits> y) noexcept;
anatofuz
parents:
diff changeset
32 template<class charT, class traits>
anatofuz
parents:
diff changeset
33 constexpr bool operator> (basic_string_view<charT, traits> x,
anatofuz
parents:
diff changeset
34 basic_string_view<charT, traits> y) noexcept;
anatofuz
parents:
diff changeset
35 template<class charT, class traits>
anatofuz
parents:
diff changeset
36 constexpr bool operator<=(basic_string_view<charT, traits> x,
anatofuz
parents:
diff changeset
37 basic_string_view<charT, traits> y) noexcept;
anatofuz
parents:
diff changeset
38 template<class charT, class traits>
anatofuz
parents:
diff changeset
39 constexpr bool operator>=(basic_string_view<charT, traits> x,
anatofuz
parents:
diff changeset
40 basic_string_view<charT, traits> y) noexcept;
anatofuz
parents:
diff changeset
41 // see below, sufficient additional overloads of comparison functions
anatofuz
parents:
diff changeset
42
anatofuz
parents:
diff changeset
43 // 7.10, Inserters and extractors
anatofuz
parents:
diff changeset
44 template<class charT, class traits>
anatofuz
parents:
diff changeset
45 basic_ostream<charT, traits>&
anatofuz
parents:
diff changeset
46 operator<<(basic_ostream<charT, traits>& os,
anatofuz
parents:
diff changeset
47 basic_string_view<charT, traits> str);
anatofuz
parents:
diff changeset
48
anatofuz
parents:
diff changeset
49 // basic_string_view typedef names
anatofuz
parents:
diff changeset
50 typedef basic_string_view<char> string_view;
anatofuz
parents:
diff changeset
51 typedef basic_string_view<char16_t> u16string_view;
anatofuz
parents:
diff changeset
52 typedef basic_string_view<char32_t> u32string_view;
anatofuz
parents:
diff changeset
53 typedef basic_string_view<wchar_t> wstring_view;
anatofuz
parents:
diff changeset
54
anatofuz
parents:
diff changeset
55 template<class charT, class traits = char_traits<charT>>
anatofuz
parents:
diff changeset
56 class basic_string_view {
anatofuz
parents:
diff changeset
57 public:
anatofuz
parents:
diff changeset
58 // types
anatofuz
parents:
diff changeset
59 typedef traits traits_type;
anatofuz
parents:
diff changeset
60 typedef charT value_type;
anatofuz
parents:
diff changeset
61 typedef charT* pointer;
anatofuz
parents:
diff changeset
62 typedef const charT* const_pointer;
anatofuz
parents:
diff changeset
63 typedef charT& reference;
anatofuz
parents:
diff changeset
64 typedef const charT& const_reference;
anatofuz
parents:
diff changeset
65 typedef implementation-defined const_iterator;
anatofuz
parents:
diff changeset
66 typedef const_iterator iterator;
anatofuz
parents:
diff changeset
67 typedef reverse_iterator<const_iterator> const_reverse_iterator;
anatofuz
parents:
diff changeset
68 typedef const_reverse_iterator reverse_iterator;
anatofuz
parents:
diff changeset
69 typedef size_t size_type;
anatofuz
parents:
diff changeset
70 typedef ptrdiff_t difference_type;
anatofuz
parents:
diff changeset
71 static constexpr size_type npos = size_type(-1);
anatofuz
parents:
diff changeset
72
anatofuz
parents:
diff changeset
73 // 7.3, basic_string_view constructors and assignment operators
anatofuz
parents:
diff changeset
74 constexpr basic_string_view() noexcept;
anatofuz
parents:
diff changeset
75 constexpr basic_string_view(const basic_string_view&) noexcept = default;
anatofuz
parents:
diff changeset
76 basic_string_view& operator=(const basic_string_view&) noexcept = default;
anatofuz
parents:
diff changeset
77 template<class Allocator>
anatofuz
parents:
diff changeset
78 constexpr basic_string_view(const charT* str);
anatofuz
parents:
diff changeset
79 constexpr basic_string_view(const charT* str, size_type len);
anatofuz
parents:
diff changeset
80
anatofuz
parents:
diff changeset
81 // 7.4, basic_string_view iterator support
anatofuz
parents:
diff changeset
82 constexpr const_iterator begin() const noexcept;
anatofuz
parents:
diff changeset
83 constexpr const_iterator end() const noexcept;
anatofuz
parents:
diff changeset
84 constexpr const_iterator cbegin() const noexcept;
anatofuz
parents:
diff changeset
85 constexpr const_iterator cend() const noexcept;
anatofuz
parents:
diff changeset
86 const_reverse_iterator rbegin() const noexcept;
anatofuz
parents:
diff changeset
87 const_reverse_iterator rend() const noexcept;
anatofuz
parents:
diff changeset
88 const_reverse_iterator crbegin() const noexcept;
anatofuz
parents:
diff changeset
89 const_reverse_iterator crend() const noexcept;
anatofuz
parents:
diff changeset
90
anatofuz
parents:
diff changeset
91 // 7.5, basic_string_view capacity
anatofuz
parents:
diff changeset
92 constexpr size_type size() const noexcept;
anatofuz
parents:
diff changeset
93 constexpr size_type length() const noexcept;
anatofuz
parents:
diff changeset
94 constexpr size_type max_size() const noexcept;
anatofuz
parents:
diff changeset
95 constexpr bool empty() const noexcept;
anatofuz
parents:
diff changeset
96
anatofuz
parents:
diff changeset
97 // 7.6, basic_string_view element access
anatofuz
parents:
diff changeset
98 constexpr const_reference operator[](size_type pos) const;
anatofuz
parents:
diff changeset
99 constexpr const_reference at(size_type pos) const;
anatofuz
parents:
diff changeset
100 constexpr const_reference front() const;
anatofuz
parents:
diff changeset
101 constexpr const_reference back() const;
anatofuz
parents:
diff changeset
102 constexpr const_pointer data() const noexcept;
anatofuz
parents:
diff changeset
103
anatofuz
parents:
diff changeset
104 // 7.7, basic_string_view modifiers
anatofuz
parents:
diff changeset
105 constexpr void remove_prefix(size_type n);
anatofuz
parents:
diff changeset
106 constexpr void remove_suffix(size_type n);
anatofuz
parents:
diff changeset
107 constexpr void swap(basic_string_view& s) noexcept;
anatofuz
parents:
diff changeset
108
anatofuz
parents:
diff changeset
109 size_type copy(charT* s, size_type n, size_type pos = 0) const;
anatofuz
parents:
diff changeset
110
anatofuz
parents:
diff changeset
111 constexpr basic_string_view substr(size_type pos = 0, size_type n = npos) const;
anatofuz
parents:
diff changeset
112 constexpr int compare(basic_string_view s) const noexcept;
anatofuz
parents:
diff changeset
113 constexpr int compare(size_type pos1, size_type n1, basic_string_view s) const;
anatofuz
parents:
diff changeset
114 constexpr int compare(size_type pos1, size_type n1,
anatofuz
parents:
diff changeset
115 basic_string_view s, size_type pos2, size_type n2) const;
anatofuz
parents:
diff changeset
116 constexpr int compare(const charT* s) const;
anatofuz
parents:
diff changeset
117 constexpr int compare(size_type pos1, size_type n1, const charT* s) const;
anatofuz
parents:
diff changeset
118 constexpr int compare(size_type pos1, size_type n1,
anatofuz
parents:
diff changeset
119 const charT* s, size_type n2) const;
anatofuz
parents:
diff changeset
120 constexpr size_type find(basic_string_view s, size_type pos = 0) const noexcept;
anatofuz
parents:
diff changeset
121 constexpr size_type find(charT c, size_type pos = 0) const noexcept;
anatofuz
parents:
diff changeset
122 constexpr size_type find(const charT* s, size_type pos, size_type n) const;
anatofuz
parents:
diff changeset
123 constexpr size_type find(const charT* s, size_type pos = 0) const;
anatofuz
parents:
diff changeset
124 constexpr size_type rfind(basic_string_view s, size_type pos = npos) const noexcept;
anatofuz
parents:
diff changeset
125 constexpr size_type rfind(charT c, size_type pos = npos) const noexcept;
anatofuz
parents:
diff changeset
126 constexpr size_type rfind(const charT* s, size_type pos, size_type n) const;
anatofuz
parents:
diff changeset
127 constexpr size_type rfind(const charT* s, size_type pos = npos) const;
anatofuz
parents:
diff changeset
128 constexpr size_type find_first_of(basic_string_view s, size_type pos = 0) const noexcept;
anatofuz
parents:
diff changeset
129 constexpr size_type find_first_of(charT c, size_type pos = 0) const noexcept;
anatofuz
parents:
diff changeset
130 constexpr size_type find_first_of(const charT* s, size_type pos, size_type n) const;
anatofuz
parents:
diff changeset
131 constexpr size_type find_first_of(const charT* s, size_type pos = 0) const;
anatofuz
parents:
diff changeset
132 constexpr size_type find_last_of(basic_string_view s, size_type pos = npos) const noexcept;
anatofuz
parents:
diff changeset
133 constexpr size_type find_last_of(charT c, size_type pos = npos) const noexcept;
anatofuz
parents:
diff changeset
134 constexpr size_type find_last_of(const charT* s, size_type pos, size_type n) const;
anatofuz
parents:
diff changeset
135 constexpr size_type find_last_of(const charT* s, size_type pos = npos) const;
anatofuz
parents:
diff changeset
136 constexpr size_type find_first_not_of(basic_string_view s, size_type pos = 0) const noexcept;
anatofuz
parents:
diff changeset
137 constexpr size_type find_first_not_of(charT c, size_type pos = 0) const noexcept;
anatofuz
parents:
diff changeset
138 constexpr size_type find_first_not_of(const charT* s, size_type pos, size_type n) const;
anatofuz
parents:
diff changeset
139 constexpr size_type find_first_not_of(const charT* s, size_type pos = 0) const;
anatofuz
parents:
diff changeset
140 constexpr size_type find_last_not_of(basic_string_view s, size_type pos = npos) const noexcept;
anatofuz
parents:
diff changeset
141 constexpr size_type find_last_not_of(charT c, size_type pos = npos) const noexcept;
anatofuz
parents:
diff changeset
142 constexpr size_type find_last_not_of(const charT* s, size_type pos, size_type n) const;
anatofuz
parents:
diff changeset
143 constexpr size_type find_last_not_of(const charT* s, size_type pos = npos) const;
anatofuz
parents:
diff changeset
144
anatofuz
parents:
diff changeset
145 constexpr bool starts_with(basic_string_view s) const noexcept; // C++2a
anatofuz
parents:
diff changeset
146 constexpr bool starts_with(charT c) const noexcept; // C++2a
anatofuz
parents:
diff changeset
147 constexpr bool starts_with(const charT* s) const; // C++2a
anatofuz
parents:
diff changeset
148 constexpr bool ends_with(basic_string_view s) const noexcept; // C++2a
anatofuz
parents:
diff changeset
149 constexpr bool ends_with(charT c) const noexcept; // C++2a
anatofuz
parents:
diff changeset
150 constexpr bool ends_with(const charT* s) const; // C++2a
anatofuz
parents:
diff changeset
151
anatofuz
parents:
diff changeset
152 private:
anatofuz
parents:
diff changeset
153 const_pointer data_; // exposition only
anatofuz
parents:
diff changeset
154 size_type size_; // exposition only
anatofuz
parents:
diff changeset
155 };
anatofuz
parents:
diff changeset
156
anatofuz
parents:
diff changeset
157 // 7.11, Hash support
anatofuz
parents:
diff changeset
158 template <class T> struct hash;
anatofuz
parents:
diff changeset
159 template <> struct hash<string_view>;
anatofuz
parents:
diff changeset
160 template <> struct hash<u16string_view>;
anatofuz
parents:
diff changeset
161 template <> struct hash<u32string_view>;
anatofuz
parents:
diff changeset
162 template <> struct hash<wstring_view>;
anatofuz
parents:
diff changeset
163
anatofuz
parents:
diff changeset
164 constexpr basic_string_view<char> operator "" sv( const char *str, size_t len ) noexcept;
anatofuz
parents:
diff changeset
165 constexpr basic_string_view<wchar_t> operator "" sv( const wchar_t *str, size_t len ) noexcept;
anatofuz
parents:
diff changeset
166 constexpr basic_string_view<char16_t> operator "" sv( const char16_t *str, size_t len ) noexcept;
anatofuz
parents:
diff changeset
167 constexpr basic_string_view<char32_t> operator "" sv( const char32_t *str, size_t len ) noexcept;
anatofuz
parents:
diff changeset
168
anatofuz
parents:
diff changeset
169 } // namespace std
anatofuz
parents:
diff changeset
170
anatofuz
parents:
diff changeset
171
anatofuz
parents:
diff changeset
172 */
anatofuz
parents:
diff changeset
173
anatofuz
parents:
diff changeset
174 #include <__config>
anatofuz
parents:
diff changeset
175 #include <__string>
anatofuz
parents:
diff changeset
176 #include <iosfwd>
anatofuz
parents:
diff changeset
177 #include <algorithm>
anatofuz
parents:
diff changeset
178 #include <iterator>
anatofuz
parents:
diff changeset
179 #include <limits>
anatofuz
parents:
diff changeset
180 #include <stdexcept>
anatofuz
parents:
diff changeset
181 #include <version>
anatofuz
parents:
diff changeset
182 #include <__debug>
anatofuz
parents:
diff changeset
183
anatofuz
parents:
diff changeset
184 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
anatofuz
parents:
diff changeset
185 #pragma GCC system_header
anatofuz
parents:
diff changeset
186 #endif
anatofuz
parents:
diff changeset
187
anatofuz
parents:
diff changeset
188 _LIBCPP_PUSH_MACROS
anatofuz
parents:
diff changeset
189 #include <__undef_macros>
anatofuz
parents:
diff changeset
190
anatofuz
parents:
diff changeset
191
anatofuz
parents:
diff changeset
192 _LIBCPP_BEGIN_NAMESPACE_STD
anatofuz
parents:
diff changeset
193
anatofuz
parents:
diff changeset
194 template<class _CharT, class _Traits = char_traits<_CharT> >
anatofuz
parents:
diff changeset
195 class _LIBCPP_TEMPLATE_VIS basic_string_view {
anatofuz
parents:
diff changeset
196 public:
anatofuz
parents:
diff changeset
197 // types
anatofuz
parents:
diff changeset
198 typedef _Traits traits_type;
anatofuz
parents:
diff changeset
199 typedef _CharT value_type;
anatofuz
parents:
diff changeset
200 typedef _CharT* pointer;
anatofuz
parents:
diff changeset
201 typedef const _CharT* const_pointer;
anatofuz
parents:
diff changeset
202 typedef _CharT& reference;
anatofuz
parents:
diff changeset
203 typedef const _CharT& const_reference;
anatofuz
parents:
diff changeset
204 typedef const_pointer const_iterator; // See [string.view.iterators]
anatofuz
parents:
diff changeset
205 typedef const_iterator iterator;
anatofuz
parents:
diff changeset
206 typedef _VSTD::reverse_iterator<const_iterator> const_reverse_iterator;
anatofuz
parents:
diff changeset
207 typedef const_reverse_iterator reverse_iterator;
anatofuz
parents:
diff changeset
208 typedef size_t size_type;
anatofuz
parents:
diff changeset
209 typedef ptrdiff_t difference_type;
anatofuz
parents:
diff changeset
210 static _LIBCPP_CONSTEXPR const size_type npos = -1; // size_type(-1);
anatofuz
parents:
diff changeset
211
anatofuz
parents:
diff changeset
212 static_assert((!is_array<value_type>::value), "Character type of basic_string_view must not be an array");
anatofuz
parents:
diff changeset
213 static_assert(( is_standard_layout<value_type>::value), "Character type of basic_string_view must be standard-layout");
anatofuz
parents:
diff changeset
214 static_assert(( is_trivial<value_type>::value), "Character type of basic_string_view must be trivial");
anatofuz
parents:
diff changeset
215 static_assert((is_same<_CharT, typename traits_type::char_type>::value),
anatofuz
parents:
diff changeset
216 "traits_type::char_type must be the same type as CharT");
anatofuz
parents:
diff changeset
217
anatofuz
parents:
diff changeset
218 // [string.view.cons], construct/copy
anatofuz
parents:
diff changeset
219 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
220 basic_string_view() _NOEXCEPT : __data (nullptr), __size(0) {}
anatofuz
parents:
diff changeset
221
anatofuz
parents:
diff changeset
222 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
223 basic_string_view(const basic_string_view&) _NOEXCEPT = default;
anatofuz
parents:
diff changeset
224
anatofuz
parents:
diff changeset
225 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
226 basic_string_view& operator=(const basic_string_view&) _NOEXCEPT = default;
anatofuz
parents:
diff changeset
227
anatofuz
parents:
diff changeset
228 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
229 basic_string_view(const _CharT* __s, size_type __len) _NOEXCEPT
anatofuz
parents:
diff changeset
230 : __data(__s), __size(__len)
anatofuz
parents:
diff changeset
231 {
anatofuz
parents:
diff changeset
232 #if _LIBCPP_STD_VER > 11
anatofuz
parents:
diff changeset
233 _LIBCPP_ASSERT(__len == 0 || __s != nullptr, "string_view::string_view(_CharT *, size_t): received nullptr");
anatofuz
parents:
diff changeset
234 #endif
anatofuz
parents:
diff changeset
235 }
anatofuz
parents:
diff changeset
236
anatofuz
parents:
diff changeset
237 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
238 basic_string_view(const _CharT* __s)
anatofuz
parents:
diff changeset
239 : __data(__s), __size(std::__char_traits_length_checked<_Traits>(__s)) {}
anatofuz
parents:
diff changeset
240
anatofuz
parents:
diff changeset
241 // [string.view.iterators], iterators
anatofuz
parents:
diff changeset
242 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
243 const_iterator begin() const _NOEXCEPT { return cbegin(); }
anatofuz
parents:
diff changeset
244
anatofuz
parents:
diff changeset
245 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
246 const_iterator end() const _NOEXCEPT { return cend(); }
anatofuz
parents:
diff changeset
247
anatofuz
parents:
diff changeset
248 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
249 const_iterator cbegin() const _NOEXCEPT { return __data; }
anatofuz
parents:
diff changeset
250
anatofuz
parents:
diff changeset
251 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
252 const_iterator cend() const _NOEXCEPT { return __data + __size; }
anatofuz
parents:
diff changeset
253
anatofuz
parents:
diff changeset
254 _LIBCPP_CONSTEXPR_AFTER_CXX14 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
255 const_reverse_iterator rbegin() const _NOEXCEPT { return const_reverse_iterator(cend()); }
anatofuz
parents:
diff changeset
256
anatofuz
parents:
diff changeset
257 _LIBCPP_CONSTEXPR_AFTER_CXX14 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
258 const_reverse_iterator rend() const _NOEXCEPT { return const_reverse_iterator(cbegin()); }
anatofuz
parents:
diff changeset
259
anatofuz
parents:
diff changeset
260 _LIBCPP_CONSTEXPR_AFTER_CXX14 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
261 const_reverse_iterator crbegin() const _NOEXCEPT { return const_reverse_iterator(cend()); }
anatofuz
parents:
diff changeset
262
anatofuz
parents:
diff changeset
263 _LIBCPP_CONSTEXPR_AFTER_CXX14 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
264 const_reverse_iterator crend() const _NOEXCEPT { return const_reverse_iterator(cbegin()); }
anatofuz
parents:
diff changeset
265
anatofuz
parents:
diff changeset
266 // [string.view.capacity], capacity
anatofuz
parents:
diff changeset
267 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
268 size_type size() const _NOEXCEPT { return __size; }
anatofuz
parents:
diff changeset
269
anatofuz
parents:
diff changeset
270 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
271 size_type length() const _NOEXCEPT { return __size; }
anatofuz
parents:
diff changeset
272
anatofuz
parents:
diff changeset
273 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
274 size_type max_size() const _NOEXCEPT { return numeric_limits<size_type>::max(); }
anatofuz
parents:
diff changeset
275
anatofuz
parents:
diff changeset
276 _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
anatofuz
parents:
diff changeset
277 bool empty() const _NOEXCEPT { return __size == 0; }
anatofuz
parents:
diff changeset
278
anatofuz
parents:
diff changeset
279 // [string.view.access], element access
anatofuz
parents:
diff changeset
280 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
281 const_reference operator[](size_type __pos) const _NOEXCEPT { return __data[__pos]; }
anatofuz
parents:
diff changeset
282
anatofuz
parents:
diff changeset
283 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
284 const_reference at(size_type __pos) const
anatofuz
parents:
diff changeset
285 {
anatofuz
parents:
diff changeset
286 return __pos >= size()
anatofuz
parents:
diff changeset
287 ? (__throw_out_of_range("string_view::at"), __data[0])
anatofuz
parents:
diff changeset
288 : __data[__pos];
anatofuz
parents:
diff changeset
289 }
anatofuz
parents:
diff changeset
290
anatofuz
parents:
diff changeset
291 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
292 const_reference front() const _NOEXCEPT
anatofuz
parents:
diff changeset
293 {
anatofuz
parents:
diff changeset
294 return _LIBCPP_ASSERT(!empty(), "string_view::front(): string is empty"), __data[0];
anatofuz
parents:
diff changeset
295 }
anatofuz
parents:
diff changeset
296
anatofuz
parents:
diff changeset
297 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
298 const_reference back() const _NOEXCEPT
anatofuz
parents:
diff changeset
299 {
anatofuz
parents:
diff changeset
300 return _LIBCPP_ASSERT(!empty(), "string_view::back(): string is empty"), __data[__size-1];
anatofuz
parents:
diff changeset
301 }
anatofuz
parents:
diff changeset
302
anatofuz
parents:
diff changeset
303 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
304 const_pointer data() const _NOEXCEPT { return __data; }
anatofuz
parents:
diff changeset
305
anatofuz
parents:
diff changeset
306 // [string.view.modifiers], modifiers:
anatofuz
parents:
diff changeset
307 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
308 void remove_prefix(size_type __n) _NOEXCEPT
anatofuz
parents:
diff changeset
309 {
anatofuz
parents:
diff changeset
310 _LIBCPP_ASSERT(__n <= size(), "remove_prefix() can't remove more than size()");
anatofuz
parents:
diff changeset
311 __data += __n;
anatofuz
parents:
diff changeset
312 __size -= __n;
anatofuz
parents:
diff changeset
313 }
anatofuz
parents:
diff changeset
314
anatofuz
parents:
diff changeset
315 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
316 void remove_suffix(size_type __n) _NOEXCEPT
anatofuz
parents:
diff changeset
317 {
anatofuz
parents:
diff changeset
318 _LIBCPP_ASSERT(__n <= size(), "remove_suffix() can't remove more than size()");
anatofuz
parents:
diff changeset
319 __size -= __n;
anatofuz
parents:
diff changeset
320 }
anatofuz
parents:
diff changeset
321
anatofuz
parents:
diff changeset
322 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
323 void swap(basic_string_view& __other) _NOEXCEPT
anatofuz
parents:
diff changeset
324 {
anatofuz
parents:
diff changeset
325 const value_type *__p = __data;
anatofuz
parents:
diff changeset
326 __data = __other.__data;
anatofuz
parents:
diff changeset
327 __other.__data = __p;
anatofuz
parents:
diff changeset
328
anatofuz
parents:
diff changeset
329 size_type __sz = __size;
anatofuz
parents:
diff changeset
330 __size = __other.__size;
anatofuz
parents:
diff changeset
331 __other.__size = __sz;
anatofuz
parents:
diff changeset
332 }
anatofuz
parents:
diff changeset
333
anatofuz
parents:
diff changeset
334 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
335 size_type copy(_CharT* __s, size_type __n, size_type __pos = 0) const
anatofuz
parents:
diff changeset
336 {
anatofuz
parents:
diff changeset
337 if (__pos > size())
anatofuz
parents:
diff changeset
338 __throw_out_of_range("string_view::copy");
anatofuz
parents:
diff changeset
339 size_type __rlen = _VSTD::min(__n, size() - __pos);
anatofuz
parents:
diff changeset
340 _Traits::copy(__s, data() + __pos, __rlen);
anatofuz
parents:
diff changeset
341 return __rlen;
anatofuz
parents:
diff changeset
342 }
anatofuz
parents:
diff changeset
343
anatofuz
parents:
diff changeset
344 _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
345 basic_string_view substr(size_type __pos = 0, size_type __n = npos) const
anatofuz
parents:
diff changeset
346 {
anatofuz
parents:
diff changeset
347 return __pos > size()
anatofuz
parents:
diff changeset
348 ? (__throw_out_of_range("string_view::substr"), basic_string_view())
anatofuz
parents:
diff changeset
349 : basic_string_view(data() + __pos, _VSTD::min(__n, size() - __pos));
anatofuz
parents:
diff changeset
350 }
anatofuz
parents:
diff changeset
351
anatofuz
parents:
diff changeset
352 _LIBCPP_CONSTEXPR_AFTER_CXX11 int compare(basic_string_view __sv) const _NOEXCEPT
anatofuz
parents:
diff changeset
353 {
anatofuz
parents:
diff changeset
354 size_type __rlen = _VSTD::min( size(), __sv.size());
anatofuz
parents:
diff changeset
355 int __retval = _Traits::compare(data(), __sv.data(), __rlen);
anatofuz
parents:
diff changeset
356 if ( __retval == 0 ) // first __rlen chars matched
anatofuz
parents:
diff changeset
357 __retval = size() == __sv.size() ? 0 : ( size() < __sv.size() ? -1 : 1 );
anatofuz
parents:
diff changeset
358 return __retval;
anatofuz
parents:
diff changeset
359 }
anatofuz
parents:
diff changeset
360
anatofuz
parents:
diff changeset
361 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
362 int compare(size_type __pos1, size_type __n1, basic_string_view __sv) const
anatofuz
parents:
diff changeset
363 {
anatofuz
parents:
diff changeset
364 return substr(__pos1, __n1).compare(__sv);
anatofuz
parents:
diff changeset
365 }
anatofuz
parents:
diff changeset
366
anatofuz
parents:
diff changeset
367 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
368 int compare( size_type __pos1, size_type __n1,
anatofuz
parents:
diff changeset
369 basic_string_view __sv, size_type __pos2, size_type __n2) const
anatofuz
parents:
diff changeset
370 {
anatofuz
parents:
diff changeset
371 return substr(__pos1, __n1).compare(__sv.substr(__pos2, __n2));
anatofuz
parents:
diff changeset
372 }
anatofuz
parents:
diff changeset
373
anatofuz
parents:
diff changeset
374 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
375 int compare(const _CharT* __s) const _NOEXCEPT
anatofuz
parents:
diff changeset
376 {
anatofuz
parents:
diff changeset
377 return compare(basic_string_view(__s));
anatofuz
parents:
diff changeset
378 }
anatofuz
parents:
diff changeset
379
anatofuz
parents:
diff changeset
380 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
381 int compare(size_type __pos1, size_type __n1, const _CharT* __s) const
anatofuz
parents:
diff changeset
382 {
anatofuz
parents:
diff changeset
383 return substr(__pos1, __n1).compare(basic_string_view(__s));
anatofuz
parents:
diff changeset
384 }
anatofuz
parents:
diff changeset
385
anatofuz
parents:
diff changeset
386 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
387 int compare(size_type __pos1, size_type __n1, const _CharT* __s, size_type __n2) const
anatofuz
parents:
diff changeset
388 {
anatofuz
parents:
diff changeset
389 return substr(__pos1, __n1).compare(basic_string_view(__s, __n2));
anatofuz
parents:
diff changeset
390 }
anatofuz
parents:
diff changeset
391
anatofuz
parents:
diff changeset
392 // find
anatofuz
parents:
diff changeset
393 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
394 size_type find(basic_string_view __s, size_type __pos = 0) const _NOEXCEPT
anatofuz
parents:
diff changeset
395 {
anatofuz
parents:
diff changeset
396 _LIBCPP_ASSERT(__s.size() == 0 || __s.data() != nullptr, "string_view::find(): received nullptr");
anatofuz
parents:
diff changeset
397 return __str_find<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
398 (data(), size(), __s.data(), __pos, __s.size());
anatofuz
parents:
diff changeset
399 }
anatofuz
parents:
diff changeset
400
anatofuz
parents:
diff changeset
401 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
402 size_type find(_CharT __c, size_type __pos = 0) const _NOEXCEPT
anatofuz
parents:
diff changeset
403 {
anatofuz
parents:
diff changeset
404 return __str_find<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
405 (data(), size(), __c, __pos);
anatofuz
parents:
diff changeset
406 }
anatofuz
parents:
diff changeset
407
anatofuz
parents:
diff changeset
408 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
409 size_type find(const _CharT* __s, size_type __pos, size_type __n) const
anatofuz
parents:
diff changeset
410 {
anatofuz
parents:
diff changeset
411 _LIBCPP_ASSERT(__n == 0 || __s != nullptr, "string_view::find(): received nullptr");
anatofuz
parents:
diff changeset
412 return __str_find<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
413 (data(), size(), __s, __pos, __n);
anatofuz
parents:
diff changeset
414 }
anatofuz
parents:
diff changeset
415
anatofuz
parents:
diff changeset
416 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
417 size_type find(const _CharT* __s, size_type __pos = 0) const
anatofuz
parents:
diff changeset
418 {
anatofuz
parents:
diff changeset
419 _LIBCPP_ASSERT(__s != nullptr, "string_view::find(): received nullptr");
anatofuz
parents:
diff changeset
420 return __str_find<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
421 (data(), size(), __s, __pos, traits_type::length(__s));
anatofuz
parents:
diff changeset
422 }
anatofuz
parents:
diff changeset
423
anatofuz
parents:
diff changeset
424 // rfind
anatofuz
parents:
diff changeset
425 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
426 size_type rfind(basic_string_view __s, size_type __pos = npos) const _NOEXCEPT
anatofuz
parents:
diff changeset
427 {
anatofuz
parents:
diff changeset
428 _LIBCPP_ASSERT(__s.size() == 0 || __s.data() != nullptr, "string_view::find(): received nullptr");
anatofuz
parents:
diff changeset
429 return __str_rfind<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
430 (data(), size(), __s.data(), __pos, __s.size());
anatofuz
parents:
diff changeset
431 }
anatofuz
parents:
diff changeset
432
anatofuz
parents:
diff changeset
433 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
434 size_type rfind(_CharT __c, size_type __pos = npos) const _NOEXCEPT
anatofuz
parents:
diff changeset
435 {
anatofuz
parents:
diff changeset
436 return __str_rfind<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
437 (data(), size(), __c, __pos);
anatofuz
parents:
diff changeset
438 }
anatofuz
parents:
diff changeset
439
anatofuz
parents:
diff changeset
440 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
441 size_type rfind(const _CharT* __s, size_type __pos, size_type __n) const
anatofuz
parents:
diff changeset
442 {
anatofuz
parents:
diff changeset
443 _LIBCPP_ASSERT(__n == 0 || __s != nullptr, "string_view::rfind(): received nullptr");
anatofuz
parents:
diff changeset
444 return __str_rfind<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
445 (data(), size(), __s, __pos, __n);
anatofuz
parents:
diff changeset
446 }
anatofuz
parents:
diff changeset
447
anatofuz
parents:
diff changeset
448 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
449 size_type rfind(const _CharT* __s, size_type __pos=npos) const
anatofuz
parents:
diff changeset
450 {
anatofuz
parents:
diff changeset
451 _LIBCPP_ASSERT(__s != nullptr, "string_view::rfind(): received nullptr");
anatofuz
parents:
diff changeset
452 return __str_rfind<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
453 (data(), size(), __s, __pos, traits_type::length(__s));
anatofuz
parents:
diff changeset
454 }
anatofuz
parents:
diff changeset
455
anatofuz
parents:
diff changeset
456 // find_first_of
anatofuz
parents:
diff changeset
457 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
458 size_type find_first_of(basic_string_view __s, size_type __pos = 0) const _NOEXCEPT
anatofuz
parents:
diff changeset
459 {
anatofuz
parents:
diff changeset
460 _LIBCPP_ASSERT(__s.size() == 0 || __s.data() != nullptr, "string_view::find_first_of(): received nullptr");
anatofuz
parents:
diff changeset
461 return __str_find_first_of<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
462 (data(), size(), __s.data(), __pos, __s.size());
anatofuz
parents:
diff changeset
463 }
anatofuz
parents:
diff changeset
464
anatofuz
parents:
diff changeset
465 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
466 size_type find_first_of(_CharT __c, size_type __pos = 0) const _NOEXCEPT
anatofuz
parents:
diff changeset
467 { return find(__c, __pos); }
anatofuz
parents:
diff changeset
468
anatofuz
parents:
diff changeset
469 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
470 size_type find_first_of(const _CharT* __s, size_type __pos, size_type __n) const
anatofuz
parents:
diff changeset
471 {
anatofuz
parents:
diff changeset
472 _LIBCPP_ASSERT(__n == 0 || __s != nullptr, "string_view::find_first_of(): received nullptr");
anatofuz
parents:
diff changeset
473 return __str_find_first_of<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
474 (data(), size(), __s, __pos, __n);
anatofuz
parents:
diff changeset
475 }
anatofuz
parents:
diff changeset
476
anatofuz
parents:
diff changeset
477 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
478 size_type find_first_of(const _CharT* __s, size_type __pos=0) const
anatofuz
parents:
diff changeset
479 {
anatofuz
parents:
diff changeset
480 _LIBCPP_ASSERT(__s != nullptr, "string_view::find_first_of(): received nullptr");
anatofuz
parents:
diff changeset
481 return __str_find_first_of<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
482 (data(), size(), __s, __pos, traits_type::length(__s));
anatofuz
parents:
diff changeset
483 }
anatofuz
parents:
diff changeset
484
anatofuz
parents:
diff changeset
485 // find_last_of
anatofuz
parents:
diff changeset
486 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
487 size_type find_last_of(basic_string_view __s, size_type __pos=npos) const _NOEXCEPT
anatofuz
parents:
diff changeset
488 {
anatofuz
parents:
diff changeset
489 _LIBCPP_ASSERT(__s.size() == 0 || __s.data() != nullptr, "string_view::find_last_of(): received nullptr");
anatofuz
parents:
diff changeset
490 return __str_find_last_of<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
491 (data(), size(), __s.data(), __pos, __s.size());
anatofuz
parents:
diff changeset
492 }
anatofuz
parents:
diff changeset
493
anatofuz
parents:
diff changeset
494 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
495 size_type find_last_of(_CharT __c, size_type __pos = npos) const _NOEXCEPT
anatofuz
parents:
diff changeset
496 { return rfind(__c, __pos); }
anatofuz
parents:
diff changeset
497
anatofuz
parents:
diff changeset
498 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
499 size_type find_last_of(const _CharT* __s, size_type __pos, size_type __n) const
anatofuz
parents:
diff changeset
500 {
anatofuz
parents:
diff changeset
501 _LIBCPP_ASSERT(__n == 0 || __s != nullptr, "string_view::find_last_of(): received nullptr");
anatofuz
parents:
diff changeset
502 return __str_find_last_of<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
503 (data(), size(), __s, __pos, __n);
anatofuz
parents:
diff changeset
504 }
anatofuz
parents:
diff changeset
505
anatofuz
parents:
diff changeset
506 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
507 size_type find_last_of(const _CharT* __s, size_type __pos=npos) const
anatofuz
parents:
diff changeset
508 {
anatofuz
parents:
diff changeset
509 _LIBCPP_ASSERT(__s != nullptr, "string_view::find_last_of(): received nullptr");
anatofuz
parents:
diff changeset
510 return __str_find_last_of<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
511 (data(), size(), __s, __pos, traits_type::length(__s));
anatofuz
parents:
diff changeset
512 }
anatofuz
parents:
diff changeset
513
anatofuz
parents:
diff changeset
514 // find_first_not_of
anatofuz
parents:
diff changeset
515 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
516 size_type find_first_not_of(basic_string_view __s, size_type __pos=0) const _NOEXCEPT
anatofuz
parents:
diff changeset
517 {
anatofuz
parents:
diff changeset
518 _LIBCPP_ASSERT(__s.size() == 0 || __s.data() != nullptr, "string_view::find_first_not_of(): received nullptr");
anatofuz
parents:
diff changeset
519 return __str_find_first_not_of<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
520 (data(), size(), __s.data(), __pos, __s.size());
anatofuz
parents:
diff changeset
521 }
anatofuz
parents:
diff changeset
522
anatofuz
parents:
diff changeset
523 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
524 size_type find_first_not_of(_CharT __c, size_type __pos=0) const _NOEXCEPT
anatofuz
parents:
diff changeset
525 {
anatofuz
parents:
diff changeset
526 return __str_find_first_not_of<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
527 (data(), size(), __c, __pos);
anatofuz
parents:
diff changeset
528 }
anatofuz
parents:
diff changeset
529
anatofuz
parents:
diff changeset
530 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
531 size_type find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const
anatofuz
parents:
diff changeset
532 {
anatofuz
parents:
diff changeset
533 _LIBCPP_ASSERT(__n == 0 || __s != nullptr, "string_view::find_first_not_of(): received nullptr");
anatofuz
parents:
diff changeset
534 return __str_find_first_not_of<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
535 (data(), size(), __s, __pos, __n);
anatofuz
parents:
diff changeset
536 }
anatofuz
parents:
diff changeset
537
anatofuz
parents:
diff changeset
538 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
539 size_type find_first_not_of(const _CharT* __s, size_type __pos=0) const
anatofuz
parents:
diff changeset
540 {
anatofuz
parents:
diff changeset
541 _LIBCPP_ASSERT(__s != nullptr, "string_view::find_first_not_of(): received nullptr");
anatofuz
parents:
diff changeset
542 return __str_find_first_not_of<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
543 (data(), size(), __s, __pos, traits_type::length(__s));
anatofuz
parents:
diff changeset
544 }
anatofuz
parents:
diff changeset
545
anatofuz
parents:
diff changeset
546 // find_last_not_of
anatofuz
parents:
diff changeset
547 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
548 size_type find_last_not_of(basic_string_view __s, size_type __pos=npos) const _NOEXCEPT
anatofuz
parents:
diff changeset
549 {
anatofuz
parents:
diff changeset
550 _LIBCPP_ASSERT(__s.size() == 0 || __s.data() != nullptr, "string_view::find_last_not_of(): received nullptr");
anatofuz
parents:
diff changeset
551 return __str_find_last_not_of<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
552 (data(), size(), __s.data(), __pos, __s.size());
anatofuz
parents:
diff changeset
553 }
anatofuz
parents:
diff changeset
554
anatofuz
parents:
diff changeset
555 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
556 size_type find_last_not_of(_CharT __c, size_type __pos=npos) const _NOEXCEPT
anatofuz
parents:
diff changeset
557 {
anatofuz
parents:
diff changeset
558 return __str_find_last_not_of<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
559 (data(), size(), __c, __pos);
anatofuz
parents:
diff changeset
560 }
anatofuz
parents:
diff changeset
561
anatofuz
parents:
diff changeset
562 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
563 size_type find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const
anatofuz
parents:
diff changeset
564 {
anatofuz
parents:
diff changeset
565 _LIBCPP_ASSERT(__n == 0 || __s != nullptr, "string_view::find_last_not_of(): received nullptr");
anatofuz
parents:
diff changeset
566 return __str_find_last_not_of<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
567 (data(), size(), __s, __pos, __n);
anatofuz
parents:
diff changeset
568 }
anatofuz
parents:
diff changeset
569
anatofuz
parents:
diff changeset
570 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
571 size_type find_last_not_of(const _CharT* __s, size_type __pos=npos) const
anatofuz
parents:
diff changeset
572 {
anatofuz
parents:
diff changeset
573 _LIBCPP_ASSERT(__s != nullptr, "string_view::find_last_not_of(): received nullptr");
anatofuz
parents:
diff changeset
574 return __str_find_last_not_of<value_type, size_type, traits_type, npos>
anatofuz
parents:
diff changeset
575 (data(), size(), __s, __pos, traits_type::length(__s));
anatofuz
parents:
diff changeset
576 }
anatofuz
parents:
diff changeset
577
anatofuz
parents:
diff changeset
578 #if _LIBCPP_STD_VER > 17
anatofuz
parents:
diff changeset
579 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
580 bool starts_with(basic_string_view __s) const _NOEXCEPT
anatofuz
parents:
diff changeset
581 { return size() >= __s.size() && compare(0, __s.size(), __s) == 0; }
anatofuz
parents:
diff changeset
582
anatofuz
parents:
diff changeset
583 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
584 bool starts_with(value_type __c) const _NOEXCEPT
anatofuz
parents:
diff changeset
585 { return !empty() && _Traits::eq(front(), __c); }
anatofuz
parents:
diff changeset
586
anatofuz
parents:
diff changeset
587 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
588 bool starts_with(const value_type* __s) const _NOEXCEPT
anatofuz
parents:
diff changeset
589 { return starts_with(basic_string_view(__s)); }
anatofuz
parents:
diff changeset
590
anatofuz
parents:
diff changeset
591 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
592 bool ends_with(basic_string_view __s) const _NOEXCEPT
anatofuz
parents:
diff changeset
593 { return size() >= __s.size() && compare(size() - __s.size(), npos, __s) == 0; }
anatofuz
parents:
diff changeset
594
anatofuz
parents:
diff changeset
595 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
596 bool ends_with(value_type __c) const _NOEXCEPT
anatofuz
parents:
diff changeset
597 { return !empty() && _Traits::eq(back(), __c); }
anatofuz
parents:
diff changeset
598
anatofuz
parents:
diff changeset
599 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
600 bool ends_with(const value_type* __s) const _NOEXCEPT
anatofuz
parents:
diff changeset
601 { return ends_with(basic_string_view(__s)); }
anatofuz
parents:
diff changeset
602 #endif
anatofuz
parents:
diff changeset
603
anatofuz
parents:
diff changeset
604 private:
anatofuz
parents:
diff changeset
605 const value_type* __data;
anatofuz
parents:
diff changeset
606 size_type __size;
anatofuz
parents:
diff changeset
607 };
anatofuz
parents:
diff changeset
608
anatofuz
parents:
diff changeset
609
anatofuz
parents:
diff changeset
610 // [string.view.comparison]
anatofuz
parents:
diff changeset
611 // operator ==
anatofuz
parents:
diff changeset
612 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
613 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
614 bool operator==(basic_string_view<_CharT, _Traits> __lhs,
anatofuz
parents:
diff changeset
615 basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
616 {
anatofuz
parents:
diff changeset
617 if ( __lhs.size() != __rhs.size()) return false;
anatofuz
parents:
diff changeset
618 return __lhs.compare(__rhs) == 0;
anatofuz
parents:
diff changeset
619 }
anatofuz
parents:
diff changeset
620
anatofuz
parents:
diff changeset
621 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
622 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
623 bool operator==(basic_string_view<_CharT, _Traits> __lhs,
anatofuz
parents:
diff changeset
624 typename common_type<basic_string_view<_CharT, _Traits> >::type __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
625 {
anatofuz
parents:
diff changeset
626 if ( __lhs.size() != __rhs.size()) return false;
anatofuz
parents:
diff changeset
627 return __lhs.compare(__rhs) == 0;
anatofuz
parents:
diff changeset
628 }
anatofuz
parents:
diff changeset
629
anatofuz
parents:
diff changeset
630 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
631 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
632 bool operator==(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs,
anatofuz
parents:
diff changeset
633 basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
634 {
anatofuz
parents:
diff changeset
635 if ( __lhs.size() != __rhs.size()) return false;
anatofuz
parents:
diff changeset
636 return __lhs.compare(__rhs) == 0;
anatofuz
parents:
diff changeset
637 }
anatofuz
parents:
diff changeset
638
anatofuz
parents:
diff changeset
639
anatofuz
parents:
diff changeset
640 // operator !=
anatofuz
parents:
diff changeset
641 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
642 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
643 bool operator!=(basic_string_view<_CharT, _Traits> __lhs, basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
644 {
anatofuz
parents:
diff changeset
645 if ( __lhs.size() != __rhs.size())
anatofuz
parents:
diff changeset
646 return true;
anatofuz
parents:
diff changeset
647 return __lhs.compare(__rhs) != 0;
anatofuz
parents:
diff changeset
648 }
anatofuz
parents:
diff changeset
649
anatofuz
parents:
diff changeset
650 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
651 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
652 bool operator!=(basic_string_view<_CharT, _Traits> __lhs,
anatofuz
parents:
diff changeset
653 typename common_type<basic_string_view<_CharT, _Traits> >::type __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
654 {
anatofuz
parents:
diff changeset
655 if ( __lhs.size() != __rhs.size())
anatofuz
parents:
diff changeset
656 return true;
anatofuz
parents:
diff changeset
657 return __lhs.compare(__rhs) != 0;
anatofuz
parents:
diff changeset
658 }
anatofuz
parents:
diff changeset
659
anatofuz
parents:
diff changeset
660 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
661 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
662 bool operator!=(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs,
anatofuz
parents:
diff changeset
663 basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
664 {
anatofuz
parents:
diff changeset
665 if ( __lhs.size() != __rhs.size())
anatofuz
parents:
diff changeset
666 return true;
anatofuz
parents:
diff changeset
667 return __lhs.compare(__rhs) != 0;
anatofuz
parents:
diff changeset
668 }
anatofuz
parents:
diff changeset
669
anatofuz
parents:
diff changeset
670
anatofuz
parents:
diff changeset
671 // operator <
anatofuz
parents:
diff changeset
672 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
673 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
674 bool operator<(basic_string_view<_CharT, _Traits> __lhs, basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
675 {
anatofuz
parents:
diff changeset
676 return __lhs.compare(__rhs) < 0;
anatofuz
parents:
diff changeset
677 }
anatofuz
parents:
diff changeset
678
anatofuz
parents:
diff changeset
679 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
680 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
681 bool operator<(basic_string_view<_CharT, _Traits> __lhs,
anatofuz
parents:
diff changeset
682 typename common_type<basic_string_view<_CharT, _Traits> >::type __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
683 {
anatofuz
parents:
diff changeset
684 return __lhs.compare(__rhs) < 0;
anatofuz
parents:
diff changeset
685 }
anatofuz
parents:
diff changeset
686
anatofuz
parents:
diff changeset
687 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
688 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
689 bool operator<(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs,
anatofuz
parents:
diff changeset
690 basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
691 {
anatofuz
parents:
diff changeset
692 return __lhs.compare(__rhs) < 0;
anatofuz
parents:
diff changeset
693 }
anatofuz
parents:
diff changeset
694
anatofuz
parents:
diff changeset
695
anatofuz
parents:
diff changeset
696 // operator >
anatofuz
parents:
diff changeset
697 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
698 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
699 bool operator> (basic_string_view<_CharT, _Traits> __lhs, basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
700 {
anatofuz
parents:
diff changeset
701 return __lhs.compare(__rhs) > 0;
anatofuz
parents:
diff changeset
702 }
anatofuz
parents:
diff changeset
703
anatofuz
parents:
diff changeset
704 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
705 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
706 bool operator>(basic_string_view<_CharT, _Traits> __lhs,
anatofuz
parents:
diff changeset
707 typename common_type<basic_string_view<_CharT, _Traits> >::type __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
708 {
anatofuz
parents:
diff changeset
709 return __lhs.compare(__rhs) > 0;
anatofuz
parents:
diff changeset
710 }
anatofuz
parents:
diff changeset
711
anatofuz
parents:
diff changeset
712 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
713 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
714 bool operator>(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs,
anatofuz
parents:
diff changeset
715 basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
716 {
anatofuz
parents:
diff changeset
717 return __lhs.compare(__rhs) > 0;
anatofuz
parents:
diff changeset
718 }
anatofuz
parents:
diff changeset
719
anatofuz
parents:
diff changeset
720
anatofuz
parents:
diff changeset
721 // operator <=
anatofuz
parents:
diff changeset
722 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
723 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
724 bool operator<=(basic_string_view<_CharT, _Traits> __lhs, basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
725 {
anatofuz
parents:
diff changeset
726 return __lhs.compare(__rhs) <= 0;
anatofuz
parents:
diff changeset
727 }
anatofuz
parents:
diff changeset
728
anatofuz
parents:
diff changeset
729 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
730 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
731 bool operator<=(basic_string_view<_CharT, _Traits> __lhs,
anatofuz
parents:
diff changeset
732 typename common_type<basic_string_view<_CharT, _Traits> >::type __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
733 {
anatofuz
parents:
diff changeset
734 return __lhs.compare(__rhs) <= 0;
anatofuz
parents:
diff changeset
735 }
anatofuz
parents:
diff changeset
736
anatofuz
parents:
diff changeset
737 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
738 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
739 bool operator<=(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs,
anatofuz
parents:
diff changeset
740 basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
741 {
anatofuz
parents:
diff changeset
742 return __lhs.compare(__rhs) <= 0;
anatofuz
parents:
diff changeset
743 }
anatofuz
parents:
diff changeset
744
anatofuz
parents:
diff changeset
745
anatofuz
parents:
diff changeset
746 // operator >=
anatofuz
parents:
diff changeset
747 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
748 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
749 bool operator>=(basic_string_view<_CharT, _Traits> __lhs, basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
750 {
anatofuz
parents:
diff changeset
751 return __lhs.compare(__rhs) >= 0;
anatofuz
parents:
diff changeset
752 }
anatofuz
parents:
diff changeset
753
anatofuz
parents:
diff changeset
754
anatofuz
parents:
diff changeset
755 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
756 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
757 bool operator>=(basic_string_view<_CharT, _Traits> __lhs,
anatofuz
parents:
diff changeset
758 typename common_type<basic_string_view<_CharT, _Traits> >::type __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
759 {
anatofuz
parents:
diff changeset
760 return __lhs.compare(__rhs) >= 0;
anatofuz
parents:
diff changeset
761 }
anatofuz
parents:
diff changeset
762
anatofuz
parents:
diff changeset
763 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
764 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
765 bool operator>=(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs,
anatofuz
parents:
diff changeset
766 basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
anatofuz
parents:
diff changeset
767 {
anatofuz
parents:
diff changeset
768 return __lhs.compare(__rhs) >= 0;
anatofuz
parents:
diff changeset
769 }
anatofuz
parents:
diff changeset
770
anatofuz
parents:
diff changeset
771
anatofuz
parents:
diff changeset
772 template<class _CharT, class _Traits>
anatofuz
parents:
diff changeset
773 basic_ostream<_CharT, _Traits>&
anatofuz
parents:
diff changeset
774 operator<<(basic_ostream<_CharT, _Traits>& __os,
anatofuz
parents:
diff changeset
775 basic_string_view<_CharT, _Traits> __str);
anatofuz
parents:
diff changeset
776
anatofuz
parents:
diff changeset
777 typedef basic_string_view<char> string_view;
anatofuz
parents:
diff changeset
778 #ifndef _LIBCPP_NO_HAS_CHAR8_T
anatofuz
parents:
diff changeset
779 typedef basic_string_view<char8_t> u8string_view;
anatofuz
parents:
diff changeset
780 #endif
anatofuz
parents:
diff changeset
781 typedef basic_string_view<char16_t> u16string_view;
anatofuz
parents:
diff changeset
782 typedef basic_string_view<char32_t> u32string_view;
anatofuz
parents:
diff changeset
783 typedef basic_string_view<wchar_t> wstring_view;
anatofuz
parents:
diff changeset
784
anatofuz
parents:
diff changeset
785 // [string.view.hash]
anatofuz
parents:
diff changeset
786 template<class _CharT>
anatofuz
parents:
diff changeset
787 struct _LIBCPP_TEMPLATE_VIS hash<basic_string_view<_CharT, char_traits<_CharT> > >
anatofuz
parents:
diff changeset
788 : public unary_function<basic_string_view<_CharT, char_traits<_CharT> >, size_t>
anatofuz
parents:
diff changeset
789 {
anatofuz
parents:
diff changeset
790 _LIBCPP_INLINE_VISIBILITY
anatofuz
parents:
diff changeset
791 size_t operator()(const basic_string_view<_CharT, char_traits<_CharT> > __val) const _NOEXCEPT {
anatofuz
parents:
diff changeset
792 return __do_string_hash(__val.data(), __val.data() + __val.size());
anatofuz
parents:
diff changeset
793 }
anatofuz
parents:
diff changeset
794 };
anatofuz
parents:
diff changeset
795
anatofuz
parents:
diff changeset
796
anatofuz
parents:
diff changeset
797 #if _LIBCPP_STD_VER > 11
anatofuz
parents:
diff changeset
798 inline namespace literals
anatofuz
parents:
diff changeset
799 {
anatofuz
parents:
diff changeset
800 inline namespace string_view_literals
anatofuz
parents:
diff changeset
801 {
anatofuz
parents:
diff changeset
802 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
anatofuz
parents:
diff changeset
803 basic_string_view<char> operator "" sv(const char *__str, size_t __len) _NOEXCEPT
anatofuz
parents:
diff changeset
804 {
anatofuz
parents:
diff changeset
805 return basic_string_view<char> (__str, __len);
anatofuz
parents:
diff changeset
806 }
anatofuz
parents:
diff changeset
807
anatofuz
parents:
diff changeset
808 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
anatofuz
parents:
diff changeset
809 basic_string_view<wchar_t> operator "" sv(const wchar_t *__str, size_t __len) _NOEXCEPT
anatofuz
parents:
diff changeset
810 {
anatofuz
parents:
diff changeset
811 return basic_string_view<wchar_t> (__str, __len);
anatofuz
parents:
diff changeset
812 }
anatofuz
parents:
diff changeset
813
anatofuz
parents:
diff changeset
814 #ifndef _LIBCPP_NO_HAS_CHAR8_T
anatofuz
parents:
diff changeset
815 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
anatofuz
parents:
diff changeset
816 basic_string_view<char8_t> operator "" sv(const char8_t *__str, size_t __len) _NOEXCEPT
anatofuz
parents:
diff changeset
817 {
anatofuz
parents:
diff changeset
818 return basic_string_view<char8_t> (__str, __len);
anatofuz
parents:
diff changeset
819 }
anatofuz
parents:
diff changeset
820 #endif
anatofuz
parents:
diff changeset
821
anatofuz
parents:
diff changeset
822 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
anatofuz
parents:
diff changeset
823 basic_string_view<char16_t> operator "" sv(const char16_t *__str, size_t __len) _NOEXCEPT
anatofuz
parents:
diff changeset
824 {
anatofuz
parents:
diff changeset
825 return basic_string_view<char16_t> (__str, __len);
anatofuz
parents:
diff changeset
826 }
anatofuz
parents:
diff changeset
827
anatofuz
parents:
diff changeset
828 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
anatofuz
parents:
diff changeset
829 basic_string_view<char32_t> operator "" sv(const char32_t *__str, size_t __len) _NOEXCEPT
anatofuz
parents:
diff changeset
830 {
anatofuz
parents:
diff changeset
831 return basic_string_view<char32_t> (__str, __len);
anatofuz
parents:
diff changeset
832 }
anatofuz
parents:
diff changeset
833 }
anatofuz
parents:
diff changeset
834 }
anatofuz
parents:
diff changeset
835 #endif
anatofuz
parents:
diff changeset
836 _LIBCPP_END_NAMESPACE_STD
anatofuz
parents:
diff changeset
837
anatofuz
parents:
diff changeset
838 _LIBCPP_POP_MACROS
anatofuz
parents:
diff changeset
839
anatofuz
parents:
diff changeset
840 #endif // _LIBCPP_STRING_VIEW