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=;
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());
112template<
typename String,
typename StringView>
115 friend class NBT_Reader;
116 friend class NBT_Writer;
117 friend class NBT_Helper;
119 static_assert(
sizeof(char) ==
sizeof(
typename String::value_type),
"Size error");
122 static constexpr typename String::size_type CalcStringSize(
const typename String::value_type *ltrStr,
typename String::size_type N)
125 if (N >= 1 && ltrStr[N - 1] == 0x00)
135 if (N >= 2 && ltrStr[N - 1] == 0x80 && ltrStr[N - 2] == 0xC0)
148 using String::String;
151 using String::operator=;
154 using String::operator[];
176 NBT_String(
const std::basic_string<char> &u8CharTypeString, USE_RAW_DATA) :
NBT_String(
std::basic_string_view<char>(u8CharTypeString), USE_RAW_DATA{})
183 NBT_String(
const std::basic_string<char8_t> &u8String, USE_RAW_DATA) :
NBT_String(
std::basic_string_view<char8_t>(u8String), USE_RAW_DATA{})
198 template<
typename =
void>
199 requires(
sizeof(wchar_t) ==
sizeof(char16_t))
200 NBT_String(
const std::basic_string<wchar_t> &u16WCharTypeString) :
NBT_String(
std::basic_string_view<wchar_t>(u16WCharTypeString))
214 NBT_String(std::basic_string_view<char> u8CharTypeString, USE_RAW_DATA) :String((typename String::value_type *)u8CharTypeString.data(), u8CharTypeString.size())
221 NBT_String(std::basic_string_view<char8_t> u8String, USE_RAW_DATA) :String((typename String::value_type *)u8String.data(), u8String.size())
226 NBT_String(std::basic_string_view<char> u8CharTypeString) :String(
MUTF8_Tool<typename String::value_type, char16_t, char>::U8ToMU8(u8CharTypeString))
231 NBT_String(std::basic_string_view<char8_t> u8String) :String(
MUTF8_Tool<typename String::value_type, char16_t, char8_t>::U8ToMU8(u8String))
236 template<
typename =
void>
237 requires(
sizeof(wchar_t) ==
sizeof(char16_t))
238 NBT_String(std::basic_string_view<wchar_t> u16WCharTypeString) :String(
MUTF8_Tool<typename String::value_type, wchar_t, char8_t>::U16ToMU8(u16WCharTypeString))
243 NBT_String(std::basic_string_view<char16_t> u16String) :String(
MUTF8_Tool<typename String::value_type, char16_t, char8_t>::U16ToMU8(u16String))
252 template<
typename String::
size_type N>
253 NBT_String(
const typename String::value_type(<rStr)[N]) :String(ltrStr, CalcStringSize(ltrStr, N))
274 return std::basic_string_view<char>((
const char *)String::data(), String::size());
300 template<
typename =
void>
301 requires(
sizeof(wchar_t) ==
sizeof(char16_t))
331 FromCharTypeUTF8(std::basic_string_view<char>(u8CharTypeString), USE_RAW_DATA{});
337 void FromUTF8(
const std::basic_string<char8_t> &u8String)
339 FromUTF8(std::basic_string_view<char8_t>(u8String));
346 void FromUTF8(
const std::basic_string<char8_t> &u8String, USE_RAW_DATA)
348 FromUTF8(std::basic_string_view<char8_t>(u8String), USE_RAW_DATA{});
354 template<
typename =
void>
355 requires(
sizeof(wchar_t) ==
sizeof(char16_t))
364 void FromUTF16(
const std::basic_string<char16_t> &u16String)
366 FromUTF16(std::basic_string_view<char16_t>(u16String));
385 String::operator=((
typename String::value_type *)u8CharTypeString.data(), u8CharTypeString.size());
391 void FromUTF8(std::basic_string_view<char8_t> u8String)
400 void FromUTF8(std::basic_string_view<char8_t> u8String, USE_RAW_DATA)
402 String::operator=((
typename String::value_type *)u8String.data(), u8String.size());
408 template<
typename =
void>
409 requires(
sizeof(wchar_t) ==
sizeof(char16_t))
418 void FromUTF16(std::basic_string_view<char16_t> u16String)
433 template<
typename String,
typename StringView>
441 return std::hash<std::basic_string_view<char>>{}(s.GetCharTypeView());
449 template<
typename String,
typename StringView>
457 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: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:114
NBT_String(const std::basic_string< char8_t > &u8String, USE_RAW_DATA)
从UTF-8编码字符串直接构造NBT_String对象
定义 NBT_String.hpp:183
NBT_StringView< String, StringView > View
当前String对应的视图View类型
定义 NBT_String.hpp:145
NBT_String(std::basic_string_view< char > u8CharTypeString, USE_RAW_DATA)
从char类型的UTF-8编码字符串视图直接构造NBT_String对象
定义 NBT_String.hpp:214
void FromWchartTypeUTF16(std::basic_string_view< wchar_t > u16WCharTypeString)
从wchar_t类型的UTF-16编码字符串替换当前对象内容
定义 NBT_String.hpp:410
NBT_String(const std::basic_string< wchar_t > &u16WCharTypeString)
从wchar_t类型的UTF-16编码字符串构造NBT_String对象
定义 NBT_String.hpp:200
auto ToUTF16(void) const
转换到UTF-16字符编码
定义 NBT_String.hpp:310
void FromUTF16(std::basic_string_view< char16_t > u16String)
从UTF-16编码字符串替换当前对象内容
定义 NBT_String.hpp:418
void FromCharTypeUTF8(const std::basic_string< char > &u8CharTypeString)
从char类型的UTF-8编码字符串替换当前对象内容
定义 NBT_String.hpp:320
void FromUTF8(const std::basic_string< char8_t > &u8String, USE_RAW_DATA)
从UTF-8编码字符串直接替换当前对象内容
定义 NBT_String.hpp:346
NBT_String(const std::basic_string< char16_t > &u16String)
从UTF-16编码字符串构造NBT_String对象
定义 NBT_String.hpp:205
void FromCharTypeUTF8(std::basic_string_view< char > u8CharTypeString, USE_RAW_DATA)
从char类型的UTF-8编码字符串直接替换当前对象内容
定义 NBT_String.hpp:383
NBT_String(String &&_Move)
提供从父类移动构造此类的途径
定义 NBT_String.hpp:163
NBT_String(const String &_Copy)
提供从父类拷贝构造此类的途径
定义 NBT_String.hpp:158
void FromCharTypeUTF8(const std::basic_string< char > &u8CharTypeString, USE_RAW_DATA)
从 char 类型的UTF-8编码字符串直接替换当前对象内容
定义 NBT_String.hpp:329
NBT_String(std::basic_string_view< char8_t > u8String)
从UTF-8编码字符串视图构造NBT_String对象
定义 NBT_String.hpp:231
NBT_String(const std::basic_string< char > &u8CharTypeString, USE_RAW_DATA)
从char类型的UTF-8编码字符串直接构造NBT_String对象
定义 NBT_String.hpp:176
NBT_String(const std::basic_string< char > &u8CharTypeString)
从char类型的UTF-8编码字符串构造NBT_String对象
定义 NBT_String.hpp:188
void FromWchartTypeUTF16(const std::basic_string< wchar_t > &u16WCharTypeString)
从wchar_t类型的UTF-16编码字符串替换当前对象内容
定义 NBT_String.hpp:356
auto ToUTF8(void) const
转换到UTF-8字符编码
定义 NBT_String.hpp:291
void FromUTF16(const std::basic_string< char16_t > &u16String)
从UTF-16编码字符串替换当前对象内容
定义 NBT_String.hpp:364
NBT_String(const typename String::value_type(<rStr)[N])
通过c风格字符串或字符数组初始化
定义 NBT_String.hpp:253
std::basic_string_view< char > GetCharTypeView(void) const noexcept
直接从当前对象获取char类型的视图
定义 NBT_String.hpp:272
NBT_String(std::basic_string_view< char > u8CharTypeString)
从char类型的UTF-8编码字符串视图构造NBT_String对象
定义 NBT_String.hpp:226
NBT_String(std::basic_string_view< char16_t > u16String)
从UTF-16编码字符串视图构造NBT_String对象
定义 NBT_String.hpp:243
void FromUTF8(std::basic_string_view< char8_t > u8String, USE_RAW_DATA)
从UTF-8编码字符串直接替换当前对象内容
定义 NBT_String.hpp:400
NBT_String(const View &view)
从对应的视图类型View中构造String
定义 NBT_String.hpp:258
NBT_String(std::basic_string_view< char8_t > u8String, USE_RAW_DATA)
从UTF-8编码字符串视图直接构造NBT_String对象
定义 NBT_String.hpp:221
NBT_String(const std::basic_string< char8_t > &u8String)
从UTF-8编码字符串构造NBT_String对象
定义 NBT_String.hpp:193
NBT_String(std::basic_string_view< wchar_t > u16WCharTypeString)
从wchar_t类型的UTF-16编码字符串视图构造NBT_String对象
定义 NBT_String.hpp:238
NBT_String(const StringView &_View)
从对应的视图类型View的父类构造String
定义 NBT_String.hpp:263
void FromCharTypeUTF8(std::basic_string_view< char > u8CharTypeString)
从char类型的UTF-8编码字符串替换当前对象内容
定义 NBT_String.hpp:374
auto ToCharTypeUTF8(void) const
转换到UTF-8字符编码,但是返回为char类型而非char8_t类型
定义 NBT_String.hpp:283
void FromUTF8(const std::basic_string< char8_t > &u8String)
从UTF-8编码字符串替换当前对象内容
定义 NBT_String.hpp:337
void FromUTF8(std::basic_string_view< char8_t > u8String)
从UTF-8编码字符串替换当前对象内容
定义 NBT_String.hpp:391
auto ToWchartTypeUTF16(void) const
转换到UTF-16字符编码,但是返回为wchar_t类型而非char16_t类型
定义 NBT_String.hpp:302
这个类用于提供从NBT_Type::Compound对象写出到NBT二进制流的序列化功能
定义 NBT_Writer.hpp:22
在std命名空间中添加类的默认hash特化以便unordered_map等容器自动获取
定义 NBT_String.hpp:428
用于重载匹配的标签类型,指示直接使用原始值而非自动转换
定义 NBT_String.hpp:168
size_t operator()(const NBT_StringView< String, StringView > &s) const noexcept
仿函数调用运算符
定义 NBT_String.hpp:455
size_t operator()(const NBT_String< String, StringView > &s) const noexcept
仿函数调用运算符
定义 NBT_String.hpp:439