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)
56 using StringView::StringView;
59 using StringView::operator=;
78 template<
typename StringView::
size_type N>
79 constexpr NBT_StringView(
const typename StringView::value_type(<rStr)[N]) :StringView(ltrStr, CalcStringViewSize(ltrStr, N))
103 return std::basic_string_view<char>((
const char *)StringView::data(), StringView::size());
108 const StringView &
GetData(
void)
const noexcept
126template<
typename String,
typename StringView>
129 friend class NBT_Reader;
130 friend class NBT_Writer;
131 friend class NBT_Helper;
133 static_assert(
sizeof(char) ==
sizeof(
typename String::value_type),
"Size error");
136 static constexpr typename String::size_type CalcStringSize(
const typename String::value_type *ltrStr,
typename String::size_type N)
139 if (N >= 1 && ltrStr[N - 1] == 0x00)
149 if (N >= 2 && ltrStr[N - 1] == 0x80 && ltrStr[N - 2] == 0xC0)
165 using String::String;
168 using String::operator=;
190 NBT_String(
const std::basic_string<char> &u8CharTypeString, USE_RAW_DATA) :
NBT_String(
std::basic_string_view<char>(u8CharTypeString), USE_RAW_DATA{})
197 NBT_String(
const std::basic_string<char8_t> &u8String, USE_RAW_DATA) :
NBT_String(
std::basic_string_view<char8_t>(u8String), USE_RAW_DATA{})
212 template<
typename =
void>
213 requires(
sizeof(wchar_t) ==
sizeof(char16_t))
214 NBT_String(
const std::basic_string<wchar_t> &u16WCharTypeString) :
NBT_String(
std::basic_string_view<wchar_t>(u16WCharTypeString))
228 NBT_String(std::basic_string_view<char> u8CharTypeString, USE_RAW_DATA) :String((typename String::value_type *)u8CharTypeString.data(), u8CharTypeString.size())
235 NBT_String(std::basic_string_view<char8_t> u8String, USE_RAW_DATA) :String((typename String::value_type *)u8String.data(), u8String.size())
240 NBT_String(std::basic_string_view<char> u8CharTypeString) :String(
MUTF8_Tool<typename String::value_type, char16_t, char>::U8ToMU8(u8CharTypeString))
245 NBT_String(std::basic_string_view<char8_t> u8String) :String(
MUTF8_Tool<typename String::value_type, char16_t, char8_t>::U8ToMU8(u8String))
250 template<
typename =
void>
251 requires(
sizeof(wchar_t) ==
sizeof(char16_t))
252 NBT_String(std::basic_string_view<wchar_t> u16WCharTypeString) :String(
MUTF8_Tool<typename String::value_type, wchar_t, char8_t>::U16ToMU8(u16WCharTypeString))
257 NBT_String(std::basic_string_view<char16_t> u16String) :String(
MUTF8_Tool<typename String::value_type, char16_t, char8_t>::U16ToMU8(u16String))
266 template<
typename String::
size_type N>
267 NBT_String(
const typename String::value_type(<rStr)[N]) :String(ltrStr, CalcStringSize(ltrStr, N))
288 return std::basic_string_view<char>((
const char *)String::data(), String::size());
328 template<
typename =
void>
329 requires(
sizeof(wchar_t) ==
sizeof(char16_t))
359 FromCharTypeUTF8(std::basic_string_view<char>(u8CharTypeString), USE_RAW_DATA{});
365 void FromUTF8(
const std::basic_string<char8_t> &u8String)
367 FromUTF8(std::basic_string_view<char8_t>(u8String));
374 void FromUTF8(
const std::basic_string<char8_t> &u8String, USE_RAW_DATA)
376 FromUTF8(std::basic_string_view<char8_t>(u8String), USE_RAW_DATA{});
382 template<
typename =
void>
383 requires(
sizeof(wchar_t) ==
sizeof(char16_t))
392 void FromUTF16(
const std::basic_string<char16_t> &u16String)
394 FromUTF16(std::basic_string_view<char16_t>(u16String));
413 String::operator=((
typename String::value_type *)u8CharTypeString.data(), u8CharTypeString.size());
419 void FromUTF8(std::basic_string_view<char8_t> u8String)
428 void FromUTF8(std::basic_string_view<char8_t> u8String, USE_RAW_DATA)
430 String::operator=((
typename String::value_type *)u8String.data(), u8String.size());
436 template<
typename =
void>
437 requires(
sizeof(wchar_t) ==
sizeof(char16_t))
446 void FromUTF16(std::basic_string_view<char16_t> u16String)
461 template<
typename String,
typename StringView>
469 return std::hash<std::basic_string_view<char>>{}(s.GetCharTypeView());
477 template<
typename String,
typename StringView>
485 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
StringView & GetData(void) noexcept
获取底层容器数据的引用
定义 NBT_String.hpp:115
StringView Super
父类类型
定义 NBT_String.hpp:53
const StringView & GetData(void) const noexcept
获取底层容器数据的常量引用
定义 NBT_String.hpp:108
constexpr NBT_StringView(const NBT_String< String, StringView > &myString)
通过对应的NBT_String,也就是NBT_Type::String显示初始化为视图View
定义 NBT_String.hpp:88
constexpr NBT_StringView(const typename StringView::value_type(<rStr)[N])
通过c风格字符串或字符数组初始化
定义 NBT_String.hpp:79
std::basic_string_view< char > GetCharTypeView(void) const noexcept
直接获取char类型的视图
定义 NBT_String.hpp:101
constexpr NBT_StringView(const StringView &_Copy)
提供从父类拷贝构造此类的途径
定义 NBT_String.hpp:63
NBT_StringView(NBT_String< String, StringView > &&_Temp)=delete
删除临时对象构造方式,防止从临时对象构造导致悬空指针
constexpr NBT_StringView(StringView &&_Move)
提供从父类移动构造此类的途径
定义 NBT_String.hpp:68
继承自标准库std::basic_string的代理类,用于存储、处理与转换Modified-UTF-8字符串
定义 NBT_String.hpp:128
NBT_String(const std::basic_string< char8_t > &u8String, USE_RAW_DATA)
从UTF-8编码字符串直接构造NBT_String对象
定义 NBT_String.hpp:197
NBT_StringView< String, StringView > View
当前String对应的视图View类型
定义 NBT_String.hpp:162
NBT_String(std::basic_string_view< char > u8CharTypeString, USE_RAW_DATA)
从char类型的UTF-8编码字符串视图直接构造NBT_String对象
定义 NBT_String.hpp:228
auto ToUTF16(void) const
转换到UTF-16字符编码
定义 NBT_String.hpp:338
NBT_String(const std::basic_string< wchar_t > &u16WCharTypeString)
从wchar_t类型的UTF-16编码字符串构造NBT_String对象
定义 NBT_String.hpp:214
void FromUTF16(std::basic_string_view< char16_t > u16String)
从UTF-16编码字符串替换当前对象内容
定义 NBT_String.hpp:446
void FromCharTypeUTF8(const std::basic_string< char > &u8CharTypeString)
从char类型的UTF-8编码字符串替换当前对象内容
定义 NBT_String.hpp:348
void FromUTF8(const std::basic_string< char8_t > &u8String, USE_RAW_DATA)
从UTF-8编码字符串直接替换当前对象内容
定义 NBT_String.hpp:374
NBT_String(const std::basic_string< char16_t > &u16String)
从UTF-16编码字符串构造NBT_String对象
定义 NBT_String.hpp:219
void FromCharTypeUTF8(std::basic_string_view< char > u8CharTypeString, USE_RAW_DATA)
从char类型的UTF-8编码字符串直接替换当前对象内容
定义 NBT_String.hpp:411
NBT_String(String &&_Move)
提供从父类移动构造此类的途径
定义 NBT_String.hpp:177
NBT_String(const String &_Copy)
提供从父类拷贝构造此类的途径
定义 NBT_String.hpp:172
void FromCharTypeUTF8(const std::basic_string< char > &u8CharTypeString, USE_RAW_DATA)
从 char 类型的UTF-8编码字符串直接替换当前对象内容
定义 NBT_String.hpp:357
NBT_String(std::basic_string_view< char8_t > u8String)
从UTF-8编码字符串视图构造NBT_String对象
定义 NBT_String.hpp:245
NBT_String(const std::basic_string< char > &u8CharTypeString, USE_RAW_DATA)
从char类型的UTF-8编码字符串直接构造NBT_String对象
定义 NBT_String.hpp:190
NBT_String(const std::basic_string< char > &u8CharTypeString)
从char类型的UTF-8编码字符串构造NBT_String对象
定义 NBT_String.hpp:202
auto ToUTF8(void) const
转换到UTF-8字符编码
定义 NBT_String.hpp:319
void FromUTF16(const std::basic_string< char16_t > &u16String)
从UTF-16编码字符串替换当前对象内容
定义 NBT_String.hpp:392
NBT_String(const typename String::value_type(<rStr)[N])
通过c风格字符串或字符数组初始化
定义 NBT_String.hpp:267
auto ToWchartTypeUTF16(void) const
转换到UTF-16字符编码,但是返回为wchar_t类型而非char16_t类型
定义 NBT_String.hpp:330
std::basic_string_view< char > GetCharTypeView(void) const noexcept
直接从当前对象获取char类型的视图
定义 NBT_String.hpp:286
void FromWchartTypeUTF16(const std::basic_string< wchar_t > &u16WCharTypeString)
从wchar_t类型的UTF-16编码字符串替换当前对象内容
定义 NBT_String.hpp:384
NBT_String(std::basic_string_view< char > u8CharTypeString)
从char类型的UTF-8编码字符串视图构造NBT_String对象
定义 NBT_String.hpp:240
NBT_String(std::basic_string_view< char16_t > u16String)
从UTF-16编码字符串视图构造NBT_String对象
定义 NBT_String.hpp:257
String Super
父类类型
定义 NBT_String.hpp:159
void FromUTF8(std::basic_string_view< char8_t > u8String, USE_RAW_DATA)
从UTF-8编码字符串直接替换当前对象内容
定义 NBT_String.hpp:428
NBT_String(std::basic_string_view< wchar_t > u16WCharTypeString)
从wchar_t类型的UTF-16编码字符串视图构造NBT_String对象
定义 NBT_String.hpp:252
const String & GetData(void) const noexcept
获取底层容器数据的常量引用
定义 NBT_String.hpp:294
NBT_String(const View &view)
从对应的视图类型View中构造String
定义 NBT_String.hpp:272
NBT_String(std::basic_string_view< char8_t > u8String, USE_RAW_DATA)
从UTF-8编码字符串视图直接构造NBT_String对象
定义 NBT_String.hpp:235
NBT_String(const std::basic_string< char8_t > &u8String)
从UTF-8编码字符串构造NBT_String对象
定义 NBT_String.hpp:207
String & GetData(void) noexcept
获取底层容器数据的引用
定义 NBT_String.hpp:301
NBT_String(const StringView &_View)
从对应的视图类型View的父类构造String
定义 NBT_String.hpp:277
void FromCharTypeUTF8(std::basic_string_view< char > u8CharTypeString)
从char类型的UTF-8编码字符串替换当前对象内容
定义 NBT_String.hpp:402
auto ToCharTypeUTF8(void) const
转换到UTF-8字符编码,但是返回为char类型而非char8_t类型
定义 NBT_String.hpp:311
void FromWchartTypeUTF16(std::basic_string_view< wchar_t > u16WCharTypeString)
从wchar_t类型的UTF-16编码字符串替换当前对象内容
定义 NBT_String.hpp:438
void FromUTF8(const std::basic_string< char8_t > &u8String)
从UTF-8编码字符串替换当前对象内容
定义 NBT_String.hpp:365
void FromUTF8(std::basic_string_view< char8_t > u8String)
从UTF-8编码字符串替换当前对象内容
定义 NBT_String.hpp:419
这个类用于提供从NBT_Type::Compound对象写出到NBT二进制流的序列化功能
定义 NBT_Writer.hpp:23
在std命名空间中添加类的默认hash特化以便unordered_map等容器自动获取
定义 NBT_String.hpp:456
用于重载匹配的标签类型,指示直接使用原始值而非自动转换
定义 NBT_String.hpp:182
size_t operator()(const NBT_StringView< String, StringView > &s) const noexcept
仿函数调用运算符
定义 NBT_String.hpp:483
size_t operator()(const NBT_String< String, StringView > &s) const noexcept
仿函数调用运算符
定义 NBT_String.hpp:467