nlib
StringView.h
[詳解]
1 
2 /*--------------------------------------------------------------------------------*
3  Project: CrossRoad
4  Copyright (C)Nintendo All rights reserved.
5 
6  These coded instructions, statements, and computer programs contain proprietary
7  information of Nintendo and/or its licensed developers and are protected by
8  national and international copyright laws. They may not be disclosed to third
9  parties or copied or duplicated in any form, in whole or in part, without the
10  prior written consent of Nintendo.
11 
12  The content herein is highly confidential and should be handled accordingly.
13  *--------------------------------------------------------------------------------*/
14 
15 #pragma once
16 #ifndef INCLUDE_NN_NLIB_STRINGVIEW_H_
17 #define INCLUDE_NN_NLIB_STRINGVIEW_H_
18 
19 #include <algorithm>
20 #include <iterator>
21 #include <utility>
22 #include <string>
23 
24 #include "nn/nlib/Config.h"
25 #include "nn/nlib/UniquePtr.h"
26 #include "nn/nlib/Cstring.h"
27 
28 #if __has_include(<string_view>) && (!defined(_MSVC_LANG) || _MSVC_LANG > 201402L) \
29  && (defined(_MSC_VER) || __cplusplus > 201402L)
30 #include <string_view>
31 
32 NLIB_NAMESPACE_BEGIN
33 typedef std::string_view StringView;
34 NLIB_NAMESPACE_END
35 
36 #elif __has_include(<experimental/string_view>)
37 #include <experimental/string_view>
38 
39 NLIB_NAMESPACE_BEGIN
40 typedef std::experimental::string_view StringView;
41 NLIB_NAMESPACE_END
42 
43 #else
44 NLIB_NAMESPACE_BEGIN
45 
47  public:
48  // types
49  typedef char charT;
50  typedef charT value_type;
51  typedef const charT* pointer;
52  typedef const charT* const_pointer;
53  typedef const charT& reference;
54  typedef const charT& const_reference;
57  typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
59  typedef size_t size_type;
60  typedef ptrdiff_t difference_type;
61  static const size_type npos = size_type(-1);
62 
63  // [string.view.cons], construct/copy
64  NLIB_CEXPR StringView() NLIB_NOEXCEPT : len_(0), base_("") {}
65  // this ctor calls strlen(), use StringView(str, len) if you know the the length of the string.
66  explicit StringView(const charT* str) NLIB_NOEXCEPT : len_(nlib_strlen(str)), base_(str) {
67  NLIB_ASSERT(this->IsValid_());
68  }
69  StringView(const charT* str, size_type len) NLIB_NOEXCEPT : len_(len), base_(str) {
70  NLIB_ASSERT(this->IsValid_());
71  }
72 
73  // [string.view.iterators], iterators
75  NLIB_ASSERT(this->IsValid_());
76  return base_;
77  }
78  const_iterator end() const NLIB_NOEXCEPT { return begin() + len_; }
79  const_iterator cbegin() const NLIB_NOEXCEPT { return begin(); }
80  const_iterator cend() const NLIB_NOEXCEPT { return cbegin() + len_; }
81 
86 
87  // [string.view.capacity], capacity
89  NLIB_ASSERT(this->IsValid_());
90  return len_;
91  }
93  NLIB_ASSERT(this->IsValid_());
94  return len_;
95  }
96  size_type max_size() const NLIB_NOEXCEPT { return static_cast<size_type>(-1) / sizeof(charT); }
97  bool empty() const NLIB_NOEXCEPT { return this->size() == 0; }
98 
99  // [string.view.access], element access
100  const charT& operator[](size_type pos) const {
101  NLIB_ASSERT(this->IsValid_());
102  return base_[pos];
103  }
104  const charT& at(size_type pos) const {
105  NLIB_ASSERT(this->IsValid_());
106  return base_[pos];
107  }
108  const charT& front() const { return (*this)[0]; }
109  const charT& back() const { return (*this)[this->length() - 1]; }
110  const charT* data() const NLIB_NOEXCEPT { return base_; }
111 
112  // [string.view.modifiers], modifiers:
114  len_ = 0;
115  base_ = "";
116  }
118  if (n >= len_) {
119  base_ += len_;
120  len_ = 0;
121  } else {
122  base_ += n;
123  len_ -= n;
124  }
125  }
127  if (n >= len_) {
128  len_ = 0;
129  } else {
130  len_ -= n;
131  }
132  }
133 
134  // [string.view.ops], string operations:
136  NLIB_ASSERT(this->IsValid_());
137  if (pos >= len_) return StringView(base_ + len_, 0);
138  const charT* new_base = base_ + pos;
139  size_type r = static_cast<size_type>(len_ - pos);
140  size_type new_len = r > n ? n : r;
141  return StringView(new_base, new_len);
142  }
143  int compare(const StringView& s) const NLIB_NOEXCEPT;
144  int compare(const charT* s) const NLIB_NOEXCEPT { return this->compare(StringView(s)); }
145  size_type find(const StringView& s) const {
146  StringView::iterator it = std::search(begin(), end(), s.begin(), s.end());
147  return it == end() ? npos : it - begin();
148  }
149  size_type find(charT c) const { return find(StringView(&c, 1)); }
150  size_type find(const charT* s) const { return find(StringView(s, nlib_strlen(s))); }
151  size_type rfind(const StringView& s) const {
152  StringView::iterator it = std::find_end(begin(), end(), s.begin(), s.end());
153  return it == end() ? npos : it - begin();
154  }
155  size_type rfind(charT c) const { return rfind(StringView(&c, 1)); }
156  size_type rfind(const charT* s) const { return rfind(StringView(s, nlib_strlen(s))); }
157  size_type find_first_of(const StringView& s) const {
158  StringView::iterator it = std::find_first_of(begin(), end(), s.begin(), s.end());
159  return it == end() ? npos : it - begin();
160  }
161  size_type find_first_of(charT c) const { return find_first_of(StringView(&c, 1)); }
162  size_type find_first_of(const charT* s) const {
163  return find_first_of(StringView(s, nlib_strlen(s)));
164  }
165  size_type find_last_of(const StringView& s) const {
166  StringView::reverse_iterator it = std::find_first_of(rbegin(), rend(), s.begin(), s.end());
167  return it == rend() ? std::string::npos : it.base() - 1 - begin();
168  }
169  size_type find_last_of(charT c) const { return find_last_of(StringView(&c, 1)); }
170  size_type find_last_of(const charT* s) const {
171  return find_last_of(StringView(s, nlib_strlen(s)));
172  }
173  /*
174  size_type find_first_not_of(const StringView& s) const;
175  size_type find_first_not_of(charT c) const;
176  size_type find_first_not_of(const charT* s) const;
177  size_type find_last_not_of(const StringView& s) const;
178  size_type find_last_not_of(charT c) const;
179  size_type find_last_not_of(const charT* s) const;
180  */
181 
182  private:
183  bool IsValid_() const NLIB_NOEXCEPT {
184  if (!base_) return false;
185  return true;
186  }
187  size_type len_;
188  const charT* base_;
189 };
190 
191 // [string.view.comparison], non-member StringView comparison functions
192 inline bool operator==(const StringView& lhs, const StringView& rhs) NLIB_NOEXCEPT {
193  return lhs.compare(rhs) == 0;
194 }
195 NLIB_EQUAL_OPERATOR(StringView)
196 inline bool operator<(const StringView& lhs, const StringView& rhs) NLIB_NOEXCEPT {
197  return lhs.compare(rhs) < 0;
198 }
199 NLIB_COMPARE_OPERATOR(StringView)
200 
201 NLIB_NAMESPACE_END
202 #endif
203 
204 NLIB_NAMESPACE_BEGIN
205 
206 // Free functions
207 inline bool StartsWith(const StringView& str, const StringView& prefix) NLIB_NOEXCEPT {
208  if (prefix.length() > str.length()) return false;
209  return nlib_memcmp(prefix.data(), str.data(), prefix.length()) == 0;
210 }
211 inline bool StartsWith(const StringView& str, char c) NLIB_NOEXCEPT {
212  return str.front() == c;
213 }
214 inline bool StartsWith(const StringView& str, const char* prefix) NLIB_NOEXCEPT {
215  return StartsWith(str, StringView(prefix));
216 }
217 inline bool EndsWith(const StringView& str, const StringView& suffix) NLIB_NOEXCEPT {
218  if (suffix.length() > str.length()) return false;
219  return nlib_memcmp(suffix.data(), &*str.end() - suffix.length(), suffix.length()) == 0;
220 }
221 inline bool EndsWith(const StringView& str, char c) NLIB_NOEXCEPT {
222  return str.back() == c;
223 }
224 inline bool EndsWith(const StringView& str, const char* suffix) NLIB_NOEXCEPT {
225  return EndsWith(str, StringView(suffix));
226 }
227 inline bool ToCstring(char* buf, size_t buf_size, const StringView& str) NLIB_NOEXCEPT {
228  if (!buf || buf_size == 0) return false;
229  size_t len = str.length();
230  errno_t e = nlib_memcpy(buf, buf_size - 1, str.data(), len);
231  if (e == 0) {
232  buf[len] = '\0';
233  return true;
234  } else {
235  return false;
236  }
237 }
238 template<size_t N>
239 inline bool ToCstring(char (&buf)[N], const StringView& str) NLIB_NOEXCEPT {
240  return ToCstring(&buf[0], N, str);
241 }
242 #ifdef __cpp_rvalue_references
244  size_t buf_size = str.length() + 1;
245  char* p = new (std::nothrow) char[buf_size];
246  if (!p) return nullptr;
247  (void)ToCstring(p, buf_size, str);
248  return UniquePtr<char[]>(p);
249 }
250 #endif
251 inline std::pair<errno_t, size_t>
252 ToInteger(int8_t* v, const StringView& str, int base) NLIB_NOEXCEPT {
253  const char* eptr;
254  errno_t e = nlib_int8_from_chars(v, &eptr, str.data(), str.data() + str.size(), base);
255  return std::make_pair(e, eptr - str.data());
256 }
257 inline std::pair<errno_t, size_t>
258 ToInteger(int16_t* v, const StringView& str, int base) NLIB_NOEXCEPT {
259  const char* eptr;
260  errno_t e = nlib_int16_from_chars(v, &eptr, str.data(), str.data() + str.size(), base);
261  return std::make_pair(e, eptr - str.data());
262 }
263 inline std::pair<errno_t, size_t>
264 ToInteger(int32_t* v, const StringView& str, int base) NLIB_NOEXCEPT {
265  const char* eptr;
266  errno_t e = nlib_int32_from_chars(v, &eptr, str.data(), str.data() + str.size(), base);
267  return std::make_pair(e, eptr - str.data());
268 }
269 inline std::pair<errno_t, size_t>
270 ToInteger(int64_t* v, const StringView& str, int base) NLIB_NOEXCEPT {
271  const char* eptr;
272  errno_t e = nlib_int64_from_chars(v, &eptr, str.data(), str.data() + str.size(), base);
273  return std::make_pair(e, eptr - str.data());
274 }
275 inline std::pair<errno_t, size_t>
276 ToInteger(uint8_t* v, const StringView& str, int base) NLIB_NOEXCEPT {
277  const char* eptr;
278  errno_t e = nlib_uint8_from_chars(v, &eptr, str.data(), str.data() + str.size(), base);
279  return std::make_pair(e, eptr - str.data());
280 }
281 inline std::pair<errno_t, size_t>
282 ToInteger(uint16_t* v, const StringView& str, int base) NLIB_NOEXCEPT {
283  const char* eptr;
284  errno_t e = nlib_uint16_from_chars(v, &eptr, str.data(), str.data() + str.size(), base);
285  return std::make_pair(e, eptr - str.data());
286 }
287 inline std::pair<errno_t, size_t>
288 ToInteger(uint32_t* v, const StringView& str, int base) NLIB_NOEXCEPT {
289  const char* eptr;
290  errno_t e = nlib_uint32_from_chars(v, &eptr, str.data(), str.data() + str.size(), base);
291  return std::make_pair(e, eptr - str.data());
292 }
293 inline std::pair<errno_t, size_t>
294 ToInteger(uint64_t* v, const StringView& str, int base) NLIB_NOEXCEPT {
295  const char* eptr;
296  errno_t e = nlib_uint64_from_chars(v, &eptr, str.data(), str.data() + str.size(), base);
297  return std::make_pair(e, eptr - str.data());
298 }
299 inline std::pair<errno_t, size_t> ToFloat(float* v, const StringView& str) NLIB_NOEXCEPT {
300  const char* eptr;
301  errno_t e = nlib_float_from_chars(v, &eptr, str.data(), str.data() + str.size());
302  return std::make_pair(e, eptr - str.data());
303 }
304 inline std::pair<errno_t, size_t> ToDouble(double* v, const StringView& str) NLIB_NOEXCEPT {
305  const char* eptr;
306  errno_t e = nlib_double_from_chars(v, &eptr, str.data(), str.data() + str.size());
307  return std::make_pair(e, eptr - str.data());
308 }
309 template<class T>
310 inline std::pair<errno_t, size_t> ToInteger(T* v, const StringView& str) NLIB_NOEXCEPT {
311  return ToInteger(v, str, 10);
312 }
313 inline bool TrimLeft(StringView& str) NLIB_NOEXCEPT {
314  StringView::iterator it = str.begin();
315  StringView::iterator itend = str.end();
316  for (; it != itend; ++it) {
317  if (!nlib_isspace(*it)) break;
318  }
319  ptrdiff_t cnt = std::distance(str.begin(), it);
320  if (cnt == 0) return false;
321  str.remove_prefix(cnt);
322  return true;
323 }
324 inline bool TrimRight(StringView& str) NLIB_NOEXCEPT {
325  StringView::reverse_iterator it = str.rbegin();
326  StringView::reverse_iterator itend = str.rend();
327  for (; it != itend; ++it) {
328  if (!nlib_isspace(*it)) break;
329  }
330  ptrdiff_t cnt = std::distance(str.rbegin(), it);
331  if (cnt == 0) return false;
332  str.remove_suffix(cnt);
333  return true;
334 }
335 inline void Trim(StringView& str) NLIB_NOEXCEPT {
336  TrimLeft(str);
337  TrimRight(str);
338 }
340  const char* beg = str.data();
341  const char* p = static_cast<const char*>(nlib_memchr(beg, '\n', str.length()));
342  if (!p) {
343  StringView rval(str);
344  str.remove_prefix(str.length());
345  return rval;
346  }
347  size_t width = p - beg;
348  if (width > 0 && *(p - 1) == '\r') --width;
349  StringView rval(beg, width);
350  str.remove_prefix(p - beg + 1);
351  return rval;
352 }
353 inline bool Proceed(StringView& str, const StringView& prefix) NLIB_NOEXCEPT {
354  if (!StartsWith(str, prefix)) return false;
355  str.remove_prefix(prefix.length());
356  return true;
357 }
358 inline bool Proceed(StringView& str, const char* prefix) NLIB_NOEXCEPT {
359  return Proceed(str, StringView(prefix));
360 }
361 inline bool Proceed(StringView& str, char c) NLIB_NOEXCEPT {
362  if (!StartsWith(str, c)) return false;
363  str.remove_prefix(1);
364  return true;
365 }
367  StringView::iterator it = str.begin();
368  StringView::iterator it_end = str.end();
369  if (it != it_end) {
370  if (!nlib_isalpha(*it) && *it != '_') return str;
371  while (++it != it_end) {
372  if (!nlib_isalnum(*it) && *it != '_') break;
373  }
374  }
375  ptrdiff_t len = std::distance(str.begin(), it);
376  StringView rval(str.data(), len);
377  str.remove_prefix(len);
378  return rval;
379 }
380 
381 NLIB_NAMESPACE_END
382 
383 #endif // INCLUDE_NN_NLIB_STRINGVIEW_H_
void remove_prefix(size_type n) noexcept
最初のn 文字を取り除きます。
Definition: StringView.h:117
std::pair< errno_t, size_t > ToInteger(T *v, const StringView &str) noexcept
ToInteger(v, str, 10)を返します。つまり10進数として文字列を数値に変換します。
Definition: StringView.h:310
std::reverse_iterator< const_iterator > const_reverse_iterator
読み取り専用逆反復子です。
Definition: StringView.h:57
const charT * data() const noexcept
最初の文字へのポインタを返します。
Definition: StringView.h:110
size_t size_type
非負整数型で、現在はsize_tにtypedefされています。
Definition: StringView.h:59
void clear() noexcept
空文字列を設定します。
Definition: StringView.h:113
static int nlib_isalpha(int ch)
chがASCII文字の&#39;A&#39;-&#39;Z&#39;, または&#39;a&#39;-&#39;z&#39;である場合に非0、そうでない場合に0を返します。 ...
Definition: Platform.h:2484
ptrdiff_t difference_type
反復子の差分をとったときに返される型です。
Definition: StringView.h:60
errno_t nlib_uint64_from_chars(uint64_t *result, const char **endptr, const char *first, const char *last, int base)
文字列をuint64_t型に変換します。詳しくはnlib_int32_from_chars()の項目を御覧ください。 ...
bool empty() const noexcept
空文字列であればtrue、そうでなければfalseを返します。
Definition: StringView.h:97
int nlib_memcmp(const void *buf1, const void *buf2, size_t n)
buf1 とbuf2 を先頭からn バイト分unsigned charとして比較します。
StringView substr(size_type pos, size_type n=npos) const noexcept
部分文字列[pos, pos + n)を返します。
Definition: StringView.h:135
std::pair< errno_t, size_t > ToFloat(float *v, const StringView &str) noexcept
内部でnlib_float_from_chars()を呼び出して、文字列を数値に変換します。戻り値はエラー値と読み込んだ文字...
Definition: StringView.h:299
errno_t nlib_float_from_chars(float *result, const char **endptr, const char *first, const char *last)
文字列をfloat型に変換します。詳しくはnlib_double_from_chars()の項目を御覧ください。 ...
const_reverse_iterator crbegin() const noexcept
末尾要素を指す読み取り専用逆反復子を取得します。
Definition: StringView.h:84
size_type length() const noexcept
文字列長を返します。
Definition: StringView.h:92
C++11環境(エイリアステンプレートが可能な環境)においてはstd::unique_ptrにエイリアステンプレートされま...
Definition: UniquePtr.h:108
bool operator==(const HeapHash &rhs, const HeapHash &lhs)
2つのサマリを比較して等価ならば、trueを返します。
Definition: NMalloc.h:130
std::unique_ptrに相当するクラスが定義されています。
char charT
現在はchar型専用のクラスです。
Definition: StringView.h:49
UniquePtr< char[]> ToCstring(const StringView &str) noexcept
メモリを割り当ててヌル終端文字列として文字列をコピーします。コピーできた場合はtrueを返します。 ...
Definition: StringView.h:243
const charT & operator[](size_type pos) const
pos 番目の文字を取得します。
Definition: StringView.h:100
errno_t nlib_uint8_from_chars(uint8_t *result, const char **endptr, const char *first, const char *last, int base)
文字列をuint8_t型に変換します。詳しくはnlib_int32_from_chars()の項目を御覧ください。 ...
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:87
bool EndsWith(const StringView &str, const char *suffix) noexcept
suffixがstrのサフィックスである場合trueを返します。
Definition: StringView.h:224
const charT & back() const
最後の要素への参照を取得します。
Definition: StringView.h:109
constexpr StringView() noexcept
デフォルトコンストラクタです。 空文字列で初期化されます。
Definition: StringView.h:64
bool TrimRight(StringView &str) noexcept
文字列の末尾の空白を切り詰めます。
Definition: StringView.h:324
const void * nlib_memchr(const void *s, int c, size_t n)
メモリ領域[s, s + n)の先頭からn バイトを検索して、バイトc があるポインタを返します。 ...
const_iterator end() const noexcept
末尾の次を指す読み取り専用反復子を取得します。
Definition: StringView.h:78
const charT * pointer
const_pointerと同一です。
Definition: StringView.h:51
size_type max_size() const noexcept
文字列長の最大値を返します。
Definition: StringView.h:96
errno_t nlib_int32_from_chars(int32_t *result, const char **endptr, const char *first, const char *last, int base)
文字列をint32_t型に変換します。
const_iterator cend() const noexcept
末尾の次を指す読み取り専用反復子を取得します。
Definition: StringView.h:80
const_iterator iterator
const_iteratorと同一です。
Definition: StringView.h:56
int compare(const charT *s) const noexcept
文字列を比較します。
Definition: StringView.h:144
const charT & at(size_type pos) const
pos 番目の文字を取得します。
Definition: StringView.h:104
errno_t nlib_int8_from_chars(int8_t *result, const char **endptr, const char *first, const char *last, int base)
文字列をint8_t型に変換します。詳しくはnlib_int32_from_chars()の項目を御覧ください。 ...
errno_t nlib_int64_from_chars(int64_t *result, const char **endptr, const char *first, const char *last, int base)
文字列をint64_t型に変換します。詳しくはnlib_int32_from_chars()の項目を御覧ください。 ...
static int nlib_isalnum(int ch)
chがASCII文字の&#39;0&#39;-&#39;9&#39;, &#39;A&#39;-&#39;Z&#39;, または&#39;a&#39;-&#39;z&#39;である場合に非0、そうでない場合に0を返します。 ...
Definition: Platform.h:2481
const_reverse_iterator reverse_iterator
const_reverse_iteratorと同一です。
Definition: StringView.h:58
static int nlib_isspace(int ch)
chがASCII文字の&#39; &#39;, &#39;\t&#39;, または&#39;\n&#39;である場合に非0、そうでない場合に0を返します。 ...
Definition: Platform.h:2494
const_iterator begin() const noexcept
先頭要素を指す読み取り専用反復子を取得します。
Definition: StringView.h:74
bool Proceed(StringView &str, char c) noexcept
strがcで始まっていればその文字列長だけ進めます。
Definition: StringView.h:361
bool StartsWith(const StringView &str, const char *prefix) noexcept
prefixがstrのプレフィックスである場合trueを返します。
Definition: StringView.h:214
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Config.h:109
const_iterator cbegin() const noexcept
先頭要素を指す読み取り専用反復子を取得します。
Definition: StringView.h:79
StringView(const charT *str, size_type len) noexcept
(計算済みの)文字列長を与えて初期化します。
Definition: StringView.h:69
#define NLIB_CEXPR
利用可能であればconstexprが定義されます。そうでない場合は空文字列です。
Definition: Config.h:111
開発環境別の設定が書かれるファイルです。
const_reverse_iterator crend() const noexcept
先頭の前を指す読み取り専用逆反復子を取得します。
Definition: StringView.h:85
const_pointer const_iterator
読み取り専用ランダムアクセス反復子です。
Definition: StringView.h:55
StringView GetName(StringView &str) noexcept
一般に変数名とされるような文字列を取得します。自身のオブジェクト(str)は取得した文字列の次に移動します...
Definition: StringView.h:366
std::stringが持つメソッドをstd::stringを構築せずに利用するためのクラスです。 C++17のstring_viewにtype...
Definition: StringView.h:46
std::pair< errno_t, size_t > ToDouble(double *v, const StringView &str) noexcept
内部でnlib_double_from_chars()を呼び出して、文字列を数値に変換します。戻り値はエラー値と読み込んだ文...
Definition: StringView.h:304
void Trim(StringView &str) noexcept
文字列の先頭と末尾の空白を切り詰めます。
Definition: StringView.h:335
void remove_suffix(size_type n) noexcept
最後のn 文字を取り除きます。
Definition: StringView.h:126
size_t nlib_strlen(const char *s)
内部でstrlen()を呼び出します。独自の実装が動作する場合もあります。
const charT * const_pointer
要素への読み取り専用ポインタです。
Definition: StringView.h:52
const charT & const_reference
要素への読み取り専用参照です。
Definition: StringView.h:54
errno_t nlib_int16_from_chars(int16_t *result, const char **endptr, const char *first, const char *last, int base)
文字列をint16_t型に変換します。詳しくはnlib_int32_from_chars()の項目を御覧ください。 ...
strlen, strcpy等を安全に使えるようにラップしています。
const_reverse_iterator rbegin() const noexcept
末尾要素を指す読み取り専用逆反復子を取得します。
Definition: StringView.h:82
charT value_type
文字の型です。
Definition: StringView.h:50
StringView(const charT *str) noexcept
str を参照するように初期化されます。内部で文字列長が計算されます。
Definition: StringView.h:66
bool TrimLeft(StringView &str) noexcept
文字列の先頭の空白を切り詰めます。
Definition: StringView.h:313
const charT & front() const
最初の要素への参照を取得します。
Definition: StringView.h:108
size_type size() const noexcept
文字列長を返します。
Definition: StringView.h:88
const_reverse_iterator rend() const noexcept
先頭の前を指す読み取り専用逆反復子を取得します。
Definition: StringView.h:83
errno_t nlib_double_from_chars(double *result, const char **endptr, const char *first, const char *last)
文字列をdouble型に変換します。
errno_t nlib_uint16_from_chars(uint16_t *result, const char **endptr, const char *first, const char *last, int base)
文字列をuint16_t型に変換します。詳しくはnlib_int32_from_chars()の項目を御覧ください。 ...
errno_t nlib_uint32_from_chars(uint32_t *result, const char **endptr, const char *first, const char *last, int base)
文字列をuint32_t型に変換します。詳しくはnlib_int32_from_chars()の項目を御覧ください。 ...
const charT & reference
const_referenceと同一です。
Definition: StringView.h:53
StringView GetLine(StringView &str) noexcept
先頭から行末までの文字列を取得します。自身のオブジェクト(str)は次の行の行頭に移動します。 ...
Definition: StringView.h:339
int errno_t
intのtypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
Definition: NMalloc.h:37