1#ifndef NEFORCE_CORE_STRING_STRING_VIEW_HPP__
2#define NEFORCE_CORE_STRING_STRING_VIEW_HPP__
13NEFORCE_BEGIN_NAMESPACE__
27#if defined(NEFORCE_STANDARD_20) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
41NEFORCE_BEGIN_LITERALS__
55NEFORCE_NODISCARD
constexpr string_view operator""_sv(
const char* str,
size_t len)
noexcept {
return {str, len}; }
63NEFORCE_NODISCARD
constexpr wstring_view operator""_sv(
const wchar_t* str,
size_t len)
noexcept {
return {str, len}; }
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}; }
81NEFORCE_NODISCARD
constexpr u16string_view operator""_sv(
const char16_t* str,
size_t len)
noexcept {
91NEFORCE_NODISCARD
constexpr u32string_view operator""_sv(
const char32_t* str,
size_t len)
noexcept {
115template <
typename CharT>
117 CharT delim =
static_cast<CharT
>(
'\n')) {
119 if (pos >=
data.size()) {
129 str =
data.substr(start,
end - start);
147template <
typename CharT,
typename Pred>
150 Pred split = [](
const CharT ch) {
return ch ==
static_cast<CharT
>(
'\n'); }) {
152 if (pos >=
data.size()) {
162 str =
data.substr(start,
end - start);
170NEFORCE_END_NAMESPACE__
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()))
获取容器的底层数据指针