NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
string_view.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_STRING_STRING_VIEW_HPP__
2#define NEFORCE_CORE_STRING_STRING_VIEW_HPP__
3
11
13NEFORCE_BEGIN_NAMESPACE__
14
20
23
26
27#if defined(NEFORCE_STANDARD_20) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
30#endif // NEFORCE_STANDARD_20
31
34
37 // StringView
39
40
41NEFORCE_BEGIN_LITERALS__
42
48
55NEFORCE_NODISCARD constexpr string_view operator""_sv(const char* str, size_t len) noexcept { return {str, len}; }
56
63NEFORCE_NODISCARD constexpr wstring_view operator""_sv(const wchar_t* str, size_t len) noexcept { return {str, len}; }
64
65#if defined(NEFORCE_STANDARD_20) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
72NEFORCE_NODISCARD constexpr u8string_view operator""_sv(const char8_t* str, size_t len) noexcept { return {str, len}; }
73#endif // NEFORCE_STANDARD_20
74
81NEFORCE_NODISCARD constexpr u16string_view operator""_sv(const char16_t* str, size_t len) noexcept {
82 return {str, len};
83}
84
91NEFORCE_NODISCARD constexpr u32string_view operator""_sv(const char32_t* str, size_t len) noexcept {
92 return {str, len};
93}
94 // UserLiterals
96
97NEFORCE_END_LITERALS__
98
99
105
115template <typename CharT>
116constexpr bool getline(const basic_string_view<CharT> data, size_t& pos, basic_string_view<CharT>& str,
117 CharT delim = static_cast<CharT>('\n')) {
118
119 if (pos >= data.size()) {
121 return false;
122 }
123
124 size_t start = pos;
125 size_t end = pos;
126 while (end < data.size() && data[end] != delim) {
127 ++end;
128 }
129 str = data.substr(start, end - start);
130 pos = (end < data.size()) ? end + 1 : end;
131
132 return true;
133}
134
147template <typename CharT, typename Pred>
148constexpr bool getline(
150 Pred split = [](const CharT ch) { return ch == static_cast<CharT>('\n'); }) {
151
152 if (pos >= data.size()) {
154 return false;
155 }
156
157 size_t start = pos;
158 size_t end = pos;
159 while (end < data.size() && !split(data[end])) {
160 ++end;
161 }
162 str = data.substr(start, end - start);
163 pos = (end < data.size()) ? end + 1 : end;
164
165 return true;
166}
167 // StringView
169
170NEFORCE_END_NAMESPACE__
171#endif // NEFORCE_CORE_STRING_STRING_VIEW_HPP__
字符串视图容器
基本字符串视图模板
basic_string_view< char > string_view
字符字符串视图
basic_string_view< wchar_t > wstring_view
宽字符字符串视图
constexpr bool getline(const basic_string_view< CharT > data, size_t &pos, basic_string_view< CharT > &str, CharT delim=static_cast< CharT >('\n'))
从字符串视图中按分隔符提取一行
basic_string_view< char16_t > u16string_view
UTF-16字符串视图
basic_string_view< char8_t > u8string_view
UTF-8字符串视图
basic_string_view< char32_t > u32string_view
UTF-32字符串视图
NEFORCE_NODISCARD NEFORCE_ALWAYS_INLINE constexpr decltype(auto) end(Container &cont) noexcept(noexcept(cont.end()))
获取容器的结束迭代器
NEFORCE_NODISCARD NEFORCE_ALWAYS_INLINE constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针