8#include "libxr_def.hpp"
21[[nodiscard]]
constexpr size_t TrailingNulTrimmedArraySize(
char (&data)[N])
noexcept
23 return (data[N - 1] ==
'\0') ? (N - 1) : N;
27[[nodiscard]]
constexpr size_t TrailingNulTrimmedArraySize(
28 const char (&data)[N])
noexcept
30 return (data[N - 1] ==
'\0') ? (N - 1) : N;
68 template <
typename DataType>
69 requires(!std::is_const_v<DataType> &&
70 !std::is_same_v<std::remove_cvref_t<DataType>,
RawData>)
113 :
addr_(data.empty() ? nullptr : data.data()),
size_(data.size())
166 template <
typename DataType>
167 requires(!std::is_pointer_v<std::remove_cvref_t<DataType>> &&
168 !std::is_same_v<std::remove_cvref_t<DataType>,
ConstRawData> &&
169 !std::is_same_v<std::remove_cvref_t<DataType>,
RawData>)
171 :
addr_(
reinterpret_cast<const DataType*
>(&data)),
size_(
sizeof(DataType))
202 template <
typename CharPtr>
203 requires(std::is_pointer_v<std::remove_reference_t<CharPtr>> &&
204 std::is_same_v<std::remove_cv_t<
205 std::remove_pointer_t<std::remove_reference_t<CharPtr>>>,
207 !std::is_volatile_v<std::remove_pointer_t<std::remove_reference_t<CharPtr>>>)
210 size_(data != nullptr ? std::strlen(static_cast<const char*>(data)) : 0)
219 :
addr_(data.empty() ? nullptr : data.data()),
size_(data.size())
228 :
addr_(data.empty() ? nullptr : data.data()),
size_(data.size())
244 :
addr_(reinterpret_cast<const void*>(data)),
245 size_(Detail::TrailingNulTrimmedArraySize(data))
251 :
addr_(reinterpret_cast<const void*>(data)),
252 size_(Detail::TrailingNulTrimmedArraySize(data))
277 using ID =
const void*;
284 template <
typename T>
只读原始数据视图 / Immutable raw data view
ConstRawData(const std::string &data)
从只读字符串构造文本视图 / Construct a text view from a read-only string
ConstRawData(std::string_view data)
从字符串视图构造文本视图 / Construct a text view from a string view
ConstRawData(const RawData &data)
从 RawData 构造 ConstRawData,数据地址和大小保持不变。 Constructs ConstRawData from RawData, keeping the same data ad...
ConstRawData(char(&data)[N])
从字符数组构造 ConstRawData;若最后一个字符是 \\0,仅忽略这一尾随终止符。
ConstRawData(const DataType &data)
从任意对象构造只读视图 / Construct a read-only view from any object
ConstRawData & operator=(const ConstRawData &data)=default
赋值运算符重载。 Overloaded assignment operator.
ConstRawData(const void *addr, size_t size)
使用指定地址和大小构造 ConstRawData 对象。 Constructs a ConstRawData object with the specified address and size.
ConstRawData(CharPtr data)
从 char* / const char* 文本指针构造 ConstRawData,数据大小为字符串长度(不含 \0)。 Constructs ConstRawData from a char* / c...
size_t size_
数据字节数 / Data size in bytes
ConstRawData(const ConstRawData &data)=default
拷贝构造函数。 Copy constructor.
const void * addr_
数据起始地址 / Data start address
ConstRawData()=default
默认构造函数,初始化为空数据。 Default constructor initializing to empty data.
可写原始数据视图 / Mutable raw data view
RawData & operator=(const RawData &data)=default
赋值运算符重载。 Overloaded assignment operator.
RawData(void *addr, size_t size)
使用指定地址和大小构造 RawData 对象。 Constructs a RawData object with the specified address and size.
RawData()=default
默认构造函数,初始化为空数据。 Default constructor initializing to empty data.
size_t size_
数据字节数 / Data size in bytes
RawData(char(&data)[N])
从可写字符数组构造文本视图 / Construct a text view from a writable char array
void * addr_
数据起始地址 / Data start address
RawData(DataType &data)
从可写对象构造视图 / Construct a view from a writable object
RawData(const RawData &data)=default
拷贝构造函数。 Copy constructor.
RawData(char *data)
从 char * 指针构造 RawData,数据大小为字符串长度(不含 \0)。 Constructs RawData from a char * pointer,...
RawData(std::string &data)
从可写字符串构造文本视图 / Construct a text view from a writable string
类型标识符生成器 / RTTI-free type identifier generator
static ID GetID()
获取类型的唯一标识符 / Get a unique identifier for type T