1#ifndef MSTL_CORE_STRING_STRING_VIEW_HPP__
2#define MSTL_CORE_STRING_STRING_VIEW_HPP__
3#include "basic_string_view.hpp"
6using string_view = basic_string_view<char>;
7using bstring_view = basic_string_view<byte_t>;
8using wstring_view = basic_string_view<wchar_t>;
9#ifdef MSTL_STANDARD_20__
10using u8string_view = basic_string_view<char8_t>;
12using u16string_view = basic_string_view<char16_t>;
13using u32string_view = basic_string_view<char32_t>;
17MSTL_NODISCARD
constexpr string_view
operator ""_sv(
const char* str,
size_t len)
noexcept {
20MSTL_NODISCARD
constexpr wstring_view
operator ""_sv(
const wchar_t* str,
size_t len)
noexcept {
23#ifdef MSTL_STANDARD_20__
24MSTL_NODISCARD
constexpr u8string_view
operator ""_sv(
const char8_t* str,
size_t len)
noexcept {
28MSTL_NODISCARD
constexpr u16string_view
operator ""_sv(
const char16_t* str,
size_t len)
noexcept {
31MSTL_NODISCARD
constexpr u32string_view
operator ""_sv(
const char32_t* str,
size_t len)
noexcept {
37template <
typename CharT>
38constexpr bool getline(
const basic_string_view<CharT>
data,
size_t& pos,
39 basic_string_view<CharT>& str, CharT delim =
static_cast<CharT
>(
'\n')) {
41 if (pos >=
data.size()) {
42 str = basic_string_view<CharT>();
51 str =
data.substr(start,
end - start);
57template <
typename CharT,
typename Pred>
58constexpr bool getline(
const basic_string_view<CharT>
data,
size_t& pos,
59 basic_string_view<CharT>& str, Pred split = [](
const CharT ch) {
60 return ch ==
static_cast<CharT
>(
'\n');
63 if (pos >=
data.size()) {
64 str = basic_string_view<CharT>();
73 str =
data.substr(start,
end - start);
#define MSTL_END_LITERALS__
结束literals命名空间
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
#define MSTL_BEGIN_LITERALS__
开始literals命名空间(内联)
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr decltype(auto) end(Container &cont) noexcept(noexcept(cont.end()))
获取容器的结束迭代器
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针