15template<
typename String,
typename StringView>
22template<
typename String,
typename StringView>
25 friend class NBT_Reader;
26 friend class NBT_Writer;
27 friend class NBT_Helper;
30 static constexpr typename StringView::size_type CalcStringViewSize(
const typename StringView::value_type *ltrStr,
typename StringView::size_type N)
33 if (N >= 1 && ltrStr[N - 1] == 0x00)
43 if (N >= 2 && ltrStr[N - 1] == 0x80 && ltrStr[N - 2] == 0xC0)
53 using StringView::StringView;
56 using StringView::operator=;
75 template<
typename StringView::
size_type N>
76 constexpr NBT_StringView(
const typename StringView::value_type(<rStr)[N]) :StringView(ltrStr, CalcStringViewSize(ltrStr, N))
100 return std::basic_string_view<char>((
const char *)StringView::data(), StringView::size());
109template<
typename String,
typename StringView>
112 friend class NBT_Reader;
113 friend class NBT_Writer;
114 friend class NBT_Helper;
116 static_assert(
sizeof(char) ==
sizeof(
typename String::value_type),
"Size error");
119 static constexpr typename String::size_type CalcStringSize(
const typename String::value_type *ltrStr,
typename String::size_type N)
122 if (N >= 1 && ltrStr[N - 1] == 0x00)
132 if (N >= 2 && ltrStr[N - 1] == 0x80 && ltrStr[N - 2] == 0xC0)
145 using String::String;
148 using String::operator=;
170 NBT_String(
const std::basic_string<char> &u8CharTypeString, USE_RAW_DATA) :
NBT_String(
std::basic_string_view<char>(u8CharTypeString), USE_RAW_DATA{})
177 NBT_String(
const std::basic_string<char8_t> &u8String, USE_RAW_DATA) :
NBT_String(
std::basic_string_view<char8_t>(u8String), USE_RAW_DATA{})
192 template<
typename =
void>
193 requires(
sizeof(wchar_t) ==
sizeof(char16_t))
194 NBT_String(
const std::basic_string<wchar_t> &u16WCharTypeString) :
NBT_String(
std::basic_string_view<wchar_t>(u16WCharTypeString))
208 NBT_String(std::basic_string_view<char> u8CharTypeString, USE_RAW_DATA) :String((typename String::value_type *)u8CharTypeString.data(), u8CharTypeString.size())
215 NBT_String(std::basic_string_view<char8_t> u8String, USE_RAW_DATA) :String((typename String::value_type *)u8String.data(), u8String.size())
220 NBT_String(std::basic_string_view<char> u8CharTypeString) :String(
MUTF8_Tool<typename String::value_type, char16_t, char>::U8ToMU8(u8CharTypeString))
225 NBT_String(std::basic_string_view<char8_t> u8String) :String(
MUTF8_Tool<typename String::value_type, char16_t, char8_t>::U8ToMU8(u8String))
230 template<
typename =
void>
231 requires(
sizeof(wchar_t) ==
sizeof(char16_t))
232 NBT_String(std::basic_string_view<wchar_t> u16WCharTypeString) :String(
MUTF8_Tool<typename String::value_type, wchar_t, char8_t>::U16ToMU8(u16WCharTypeString))
237 NBT_String(std::basic_string_view<char16_t> u16String) :String(
MUTF8_Tool<typename String::value_type, char16_t, char8_t>::U16ToMU8(u16String))
246 template<
typename String::
size_type N>
247 NBT_String(
const typename String::value_type(<rStr)[N]) :String(ltrStr, CalcStringSize(ltrStr, N))
268 return std::basic_string_view<char>((
const char *)String::data(), String::size());
294 template<
typename =
void>
295 requires(
sizeof(wchar_t) ==
sizeof(char16_t))
325 FromCharTypeUTF8(std::basic_string_view<char>(u8CharTypeString), USE_RAW_DATA{});
331 void FromUTF8(
const std::basic_string<char8_t> &u8String)
333 FromUTF8(std::basic_string_view<char8_t>(u8String));
340 void FromUTF8(
const std::basic_string<char8_t> &u8String, USE_RAW_DATA)
342 FromUTF8(std::basic_string_view<char8_t>(u8String), USE_RAW_DATA{});
348 template<
typename =
void>
349 requires(
sizeof(wchar_t) ==
sizeof(char16_t))
358 void FromUTF16(
const std::basic_string<char16_t> &u16String)
360 FromUTF16(std::basic_string_view<char16_t>(u16String));
379 String::operator=((
typename String::value_type *)u8CharTypeString.data(), u8CharTypeString.size());
385 void FromUTF8(std::basic_string_view<char8_t> u8String)
394 void FromUTF8(std::basic_string_view<char8_t> u8String, USE_RAW_DATA)
396 String::operator=((
typename String::value_type *)u8String.data(), u8String.size());
402 template<
typename =
void>
403 requires(
sizeof(wchar_t) ==
sizeof(char16_t))
412 void FromUTF16(std::basic_string_view<char16_t> u16String)
427 template<
typename String,
typename StringView>
435 return std::hash<std::basic_string_view<char>>{}(s.GetCharTypeView());
443 template<
typename String,
typename StringView>
451 return std::hash<std::basic_string_view<char>>{}(s.GetCharTypeView());
用于格式化打印、序列化、计算哈希等功能
定义 NBT_Helper.hpp:25
这个类用于提供从NBT二进制流读取到NBT_Type::Compound对象的反序列化功能
定义 NBT_Reader.hpp:23
继承自标准库std::basic_string_view的代理类,用来提供Modified-UTF-8 String的视图类型
定义 NBT_String.hpp:24
constexpr NBT_StringView(const NBT_String< String, StringView > &myString)
通过对应的NBT_String,也就是NBT_Type::String显示初始化为视图View
定义 NBT_String.hpp:85
constexpr NBT_StringView(const typename StringView::value_type(<rStr)[N])
通过c风格字符串或字符数组初始化
定义 NBT_String.hpp:76
std::basic_string_view< char > GetCharTypeView(void) const noexcept
直接获取char类型的视图
定义 NBT_String.hpp:98
constexpr NBT_StringView(const StringView &_Copy)
提供从父类拷贝构造此类的途径
定义 NBT_String.hpp:60
NBT_StringView(NBT_String< String, StringView > &&_Temp)=delete
删除临时对象构造方式,防止从临时对象构造导致悬空指针
constexpr NBT_StringView(StringView &&_Move)
提供从父类移动构造此类的途径
定义 NBT_String.hpp:65
继承自标准库std::basic_string的代理类,用于存储、处理与转换Modified-UTF-8字符串
定义 NBT_String.hpp:111
NBT_String(const std::basic_string< char8_t > &u8String, USE_RAW_DATA)
从UTF-8编码字符串直接构造NBT_String对象
定义 NBT_String.hpp:177
NBT_StringView< String, StringView > View
当前String对应的视图View类型
定义 NBT_String.hpp:142
NBT_String(std::basic_string_view< char > u8CharTypeString, USE_RAW_DATA)
从char类型的UTF-8编码字符串视图直接构造NBT_String对象
定义 NBT_String.hpp:208
auto ToUTF16(void) const
转换到UTF-16字符编码
定义 NBT_String.hpp:304
NBT_String(const std::basic_string< wchar_t > &u16WCharTypeString)
从wchar_t类型的UTF-16编码字符串构造NBT_String对象
定义 NBT_String.hpp:194
void FromUTF16(std::basic_string_view< char16_t > u16String)
从UTF-16编码字符串替换当前对象内容
定义 NBT_String.hpp:412
void FromCharTypeUTF8(const std::basic_string< char > &u8CharTypeString)
从char类型的UTF-8编码字符串替换当前对象内容
定义 NBT_String.hpp:314
void FromUTF8(const std::basic_string< char8_t > &u8String, USE_RAW_DATA)
从UTF-8编码字符串直接替换当前对象内容
定义 NBT_String.hpp:340
NBT_String(const std::basic_string< char16_t > &u16String)
从UTF-16编码字符串构造NBT_String对象
定义 NBT_String.hpp:199
void FromCharTypeUTF8(std::basic_string_view< char > u8CharTypeString, USE_RAW_DATA)
从char类型的UTF-8编码字符串直接替换当前对象内容
定义 NBT_String.hpp:377
NBT_String(String &&_Move)
提供从父类移动构造此类的途径
定义 NBT_String.hpp:157
NBT_String(const String &_Copy)
提供从父类拷贝构造此类的途径
定义 NBT_String.hpp:152
void FromCharTypeUTF8(const std::basic_string< char > &u8CharTypeString, USE_RAW_DATA)
从 char 类型的UTF-8编码字符串直接替换当前对象内容
定义 NBT_String.hpp:323
NBT_String(std::basic_string_view< char8_t > u8String)
从UTF-8编码字符串视图构造NBT_String对象
定义 NBT_String.hpp:225
NBT_String(const std::basic_string< char > &u8CharTypeString, USE_RAW_DATA)
从char类型的UTF-8编码字符串直接构造NBT_String对象
定义 NBT_String.hpp:170
NBT_String(const std::basic_string< char > &u8CharTypeString)
从char类型的UTF-8编码字符串构造NBT_String对象
定义 NBT_String.hpp:182
auto ToUTF8(void) const
转换到UTF-8字符编码
定义 NBT_String.hpp:285
void FromUTF16(const std::basic_string< char16_t > &u16String)
从UTF-16编码字符串替换当前对象内容
定义 NBT_String.hpp:358
NBT_String(const typename String::value_type(<rStr)[N])
通过c风格字符串或字符数组初始化
定义 NBT_String.hpp:247
auto ToWchartTypeUTF16(void) const
转换到UTF-16字符编码,但是返回为wchar_t类型而非char16_t类型
定义 NBT_String.hpp:296
std::basic_string_view< char > GetCharTypeView(void) const noexcept
直接从当前对象获取char类型的视图
定义 NBT_String.hpp:266
void FromWchartTypeUTF16(const std::basic_string< wchar_t > &u16WCharTypeString)
从wchar_t类型的UTF-16编码字符串替换当前对象内容
定义 NBT_String.hpp:350
NBT_String(std::basic_string_view< char > u8CharTypeString)
从char类型的UTF-8编码字符串视图构造NBT_String对象
定义 NBT_String.hpp:220
NBT_String(std::basic_string_view< char16_t > u16String)
从UTF-16编码字符串视图构造NBT_String对象
定义 NBT_String.hpp:237
void FromUTF8(std::basic_string_view< char8_t > u8String, USE_RAW_DATA)
从UTF-8编码字符串直接替换当前对象内容
定义 NBT_String.hpp:394
NBT_String(std::basic_string_view< wchar_t > u16WCharTypeString)
从wchar_t类型的UTF-16编码字符串视图构造NBT_String对象
定义 NBT_String.hpp:232
NBT_String(const View &view)
从对应的视图类型View中构造String
定义 NBT_String.hpp:252
NBT_String(std::basic_string_view< char8_t > u8String, USE_RAW_DATA)
从UTF-8编码字符串视图直接构造NBT_String对象
定义 NBT_String.hpp:215
NBT_String(const std::basic_string< char8_t > &u8String)
从UTF-8编码字符串构造NBT_String对象
定义 NBT_String.hpp:187
NBT_String(const StringView &_View)
从对应的视图类型View的父类构造String
定义 NBT_String.hpp:257
void FromCharTypeUTF8(std::basic_string_view< char > u8CharTypeString)
从char类型的UTF-8编码字符串替换当前对象内容
定义 NBT_String.hpp:368
auto ToCharTypeUTF8(void) const
转换到UTF-8字符编码,但是返回为char类型而非char8_t类型
定义 NBT_String.hpp:277
void FromWchartTypeUTF16(std::basic_string_view< wchar_t > u16WCharTypeString)
从wchar_t类型的UTF-16编码字符串替换当前对象内容
定义 NBT_String.hpp:404
void FromUTF8(const std::basic_string< char8_t > &u8String)
从UTF-8编码字符串替换当前对象内容
定义 NBT_String.hpp:331
void FromUTF8(std::basic_string_view< char8_t > u8String)
从UTF-8编码字符串替换当前对象内容
定义 NBT_String.hpp:385
这个类用于提供从NBT_Type::Compound对象写出到NBT二进制流的序列化功能
定义 NBT_Writer.hpp:23
在std命名空间中添加类的默认hash特化以便unordered_map等容器自动获取
定义 NBT_String.hpp:422
用于重载匹配的标签类型,指示直接使用原始值而非自动转换
定义 NBT_String.hpp:162
size_t operator()(const NBT_StringView< String, StringView > &s) const noexcept
仿函数调用运算符
定义 NBT_String.hpp:449
size_t operator()(const NBT_String< String, StringView > &s) const noexcept
仿函数调用运算符
定义 NBT_String.hpp:433