|
libxr
1.0
Want to be the best embedded framework
|
运行期构造、长期保留的 NUL 结尾字符串视图。 More...
#include <libxr_string.hpp>
Public Member Functions | |
| constexpr | RuntimeStringView ()=default |
| Constructs an empty valid view. / 构造一个空的有效视图。 | |
| RuntimeStringView (const RuntimeStringView &)=delete | |
| RuntimeStringView & | operator= (const RuntimeStringView &)=delete |
| RuntimeStringView (RuntimeStringView &&other) noexcept | |
| Move-constructs by taking the retained storage handle. / 移动构造并接管保留存储句柄。 | |
| RuntimeStringView & | operator= (RuntimeStringView &&)=delete |
| RuntimeStringView (std::string_view text) | |
| Copies text into retained storage. / 拷贝文本到保留存储。 | |
| template<size_t N> requires (Source.Size() == 0 && sizeof...(Args) == 0) | |
| RuntimeStringView (char(&text)[N]) | |
| Copies one bounded mutable char array as text. / 按文本语义拷贝一个有界可变字符数组。 | |
| template<size_t N> requires (Source.Size() == 0 && sizeof...(Args) == 0) | |
| RuntimeStringView (const char(&text)[N]) | |
| Copies one bounded const char array as text. / 按文本语义拷贝一个有界只读字符数组。 | |
| template<typename CharPtr > requires (Source.Size() == 0 && sizeof...(Args) == 0 && (std::is_same_v<CharPtr, char*> || std::is_same_v<CharPtr, const char*>)) | |
| RuntimeStringView (CharPtr text) | |
| Copies a NUL-terminated C-string pointer into retained storage. / 拷贝 NUL 结尾 C 字符串指针到保留存储。 | |
| RuntimeStringView (std::nullptr_t text) | |
| Preserves the old bare-nullptr entry for runtime null checks. / 保留裸 nullptr 入口以维持运行期空指针检查语义。 | |
| template<typename First , typename Second , typename... Rest> requires (Source.Size() == 0 && sizeof...(Args) == 0) | |
| RuntimeStringView (First &&first, Second &&second, Rest &&... rest) | |
| Concatenates text parts into retained storage. / 拼接多个文本片段到保留存储。 | |
| template<typename... CallArgs> requires ((Source.Size() != 0 || sizeof...(Args) != 0) && Detail::RuntimeStringArgumentTypes<Args...>::template matches<CallArgs...>) | |
| ErrorCode | Reformat (CallArgs &&... args) |
| 使用绑定的 brace-style 格式重写当前内容。 | |
| template<typename... CallArgs> requires ((Source.Size() != 0 || sizeof...(Args) != 0) && Detail::RuntimeStringArgumentTypes<Args...>::template matches<CallArgs...>) | |
| ErrorCode | Reprintf (CallArgs &&... args) |
| 使用绑定的 printf-style 格式重写当前内容。 | |
| constexpr std::string_view | View () const |
| Returns the current read-only view. / 返回当前只读视图。 | |
| const char * | CStr () const |
| Returns a NUL-terminated C string. / 返回 NUL 结尾 C 字符串。 | |
| constexpr size_t | Size () const |
| Returns the text size excluding the trailing NUL. / 返回不含结尾 NUL 的文本长度。 | |
| constexpr bool | Empty () const |
| Returns whether the current visible text is empty. / 返回当前可见文本是否为空。 | |
| constexpr ErrorCode | Status () const |
| Returns the latest operation status. / 返回最近一次操作状态。 | |
| constexpr | operator std::string_view () const |
| Converts to a read-only string view. / 转换为只读字符串视图。 | |
| operator const char * () const | |
| Converts to a NUL-terminated C string. / 转换为 NUL 结尾 C 字符串。 | |
Private Member Functions | |
| ErrorCode | SetFailure (ErrorCode status) |
| 记录最近一次失败,并在已有存储上保留一个有效的空 C 字符串。 | |
| ErrorCode | EnsureCapacity (size_t payload_size) |
| 为首个非空结果分配保留存储,已有存储不会再次扩容。 | |
| ErrorCode | AssignCopy (std::string_view text) |
| 构造期文本拷贝入口;空字符串保持零分配。 | |
| ErrorCode | AssignCopy (const char *text) |
| C 字符串入口负责空指针检查,再进入统一的文本拷贝路径。 | |
| template<typename... Parts> | |
| ErrorCode | AssignConcat (Parts &&... parts) |
| 拼接构造的两遍流程:先校验并统计所有片段,再一次性写入。 | |
| template<typename WriteFn > | |
| ErrorCode | AssignFormatted (size_t max_size, WriteFn &&write) |
| 格式化重写入口;首次调用按编译期上界分配,后续调用只覆盖已有存储。 | |
Static Private Member Functions | |
| static constexpr size_t | BoundedTextLength (const char *text, size_t bound) noexcept |
在已知边界内查找文本长度;遇到首个 \0 截断,否则使用整个数组长度。 | |
| template<typename T > | |
| static constexpr Detail::RuntimeStringTextPart | NormalizeConcatPart (T &&text) |
把拼接构造支持的输入统一归一化为只读文本片段;普通拼接只接受文本类输入, 数值格式化必须显式走 Reformat() 或 Reprintf()。 | |
Private Attributes | |
| char * | data_ = nullptr |
| 长期保留的 NUL 结尾存储;对象析构时不释放。 / Retained NUL-terminated storage; not released by the destructor. | |
| size_t | size_ = 0 |
| 不含结尾 NUL 的当前可见文本长度。 / Current visible payload size excluding the trailing NUL. | |
| size_t | capacity_ = 0 |
| 不含结尾 NUL 的已探测/分配容量。 / Probed/allocated payload capacity excluding the trailing NUL. | |
| ErrorCode | status_ = ErrorCode::OK |
| 最近一次构造或重写状态。 / Status of the latest construction or rewrite. | |
运行期构造、长期保留的 NUL 结尾字符串视图。
Runtime-built retained NUL-terminated string view.
文本构造用于模块名、topic 名、后缀拼接等只构造一次的名字。 格式化构造绑定字面量和参数类型,第一次 Reformat() / Reprintf() 前从编译后的格式元数据计算最大容量,之后只复用该容量。对象析构时 不释放已分配存储。
Text construction is for retained names such as module names and topic suffixes. Formatted instances bind the literal and argument types, compute maximum capacity from compiled format metadata before the first rewrite, then reuse that capacity. Allocated storage is intentionally not released by the object destructor.
Definition at line 254 of file libxr_string.hpp.
|
inlinenoexcept |
Move-constructs by taking the retained storage handle. / 移动构造并接管保留存储句柄。
Definition at line 273 of file libxr_string.hpp.
|
inlineexplicit |
Copies text into retained storage. / 拷贝文本到保留存储。
Definition at line 288 of file libxr_string.hpp.
|
inlineexplicit |
Copies one bounded mutable char array as text. / 按文本语义拷贝一个有界可变字符数组。
Definition at line 296 of file libxr_string.hpp.
|
inlineexplicit |
Copies one bounded const char array as text. / 按文本语义拷贝一个有界只读字符数组。
Definition at line 304 of file libxr_string.hpp.
|
inlineexplicit |
Copies a NUL-terminated C-string pointer into retained storage. / 拷贝 NUL 结尾 C 字符串指针到保留存储。
Definition at line 314 of file libxr_string.hpp.
|
inlineexplicit |
Preserves the old bare-nullptr entry for runtime null checks. / 保留裸 nullptr 入口以维持运行期空指针检查语义。
Definition at line 320 of file libxr_string.hpp.
|
inlineexplicit |
Concatenates text parts into retained storage. / 拼接多个文本片段到保留存储。
Definition at line 328 of file libxr_string.hpp.
|
inlinenodiscardprivate |
拼接构造的两遍流程:先校验并统计所有片段,再一次性写入。
Two-pass concatenation constructor: validate/count all parts before one retained write.
第一遍会传播空指针或非法片段错误,避免已经写了一半才发现参数不可用。 The first pass propagates null-pointer or invalid-part errors before any partial payload is written.
Definition at line 511 of file libxr_string.hpp.
|
inlinenodiscardprivate |
C 字符串入口负责空指针检查,再进入统一的文本拷贝路径。
C-string entry checks null pointers before using the common text copy path.
Definition at line 495 of file libxr_string.hpp.
|
inlinenodiscardprivate |
构造期文本拷贝入口;空字符串保持零分配。
Construction-time text copy entry; empty text remains allocation-free.
Definition at line 470 of file libxr_string.hpp.
|
inlinenodiscardprivate |
格式化重写入口;首次调用按编译期上界分配,后续调用只覆盖已有存储。
Formatted rewrite entry; the first call allocates the compile-time upper bound, later calls only overwrite retained storage.
max_size 来自已编译格式元数据和字段类型上界;write 使用本次真实参数写入 buffer sink。 max_size comes from compiled format metadata and per-field type bounds; write uses the current call arguments with the buffer sink.
Definition at line 583 of file libxr_string.hpp.
|
inlinestaticnodiscardconstexprprivatenoexcept |
在已知边界内查找文本长度;遇到首个 \0 截断,否则使用整个数组长度。
Find text length within a known bound; stop at the first \0, otherwise use the whole array extent.
Definition at line 614 of file libxr_string.hpp.
|
inlinenodiscard |
Returns a NUL-terminated C string. / 返回 NUL 结尾 C 字符串。
Definition at line 391 of file libxr_string.hpp.
|
inlinenodiscardconstexpr |
Returns whether the current visible text is empty. / 返回当前可见文本是否为空。
Definition at line 395 of file libxr_string.hpp.
|
inlinenodiscardprivate |
为首个非空结果分配保留存储,已有存储不会再次扩容。
Allocate retained storage for the first non-empty result; existing storage is never grown.
RuntimeStringView 的容量策略是一次分配后复用。格式化路径会先从编译格式 元数据计算最大容量,因此已有存储不足表示设计边界被突破,不能在这里静默 new 第二块内存。 第一次保留分配若失败,开发期应直接暴露问题;发布构建仍保留 NO_MEM 回退状态。
RuntimeStringView reuses one allocation. The formatted path computes maximum capacity from compiled format metadata first, so an oversized later write is a boundary error rather than a reason to allocate again. If the first retained allocation fails, debug builds should surface it immediately; release builds still keep the NO_MEM fallback status.
Definition at line 437 of file libxr_string.hpp.
|
inlinestaticnodiscardconstexprprivate |
把拼接构造支持的输入统一归一化为只读文本片段;普通拼接只接受文本类输入, 数值格式化必须显式走 Reformat() 或 Reprintf()。
Normalize one supported concatenation input into a read-only text part. Plain concatenation accepts text-like inputs only; numeric formatting must go through Reformat() or Reprintf().
Definition at line 633 of file libxr_string.hpp.
|
inlinenodiscard |
Converts to a NUL-terminated C string. / 转换为 NUL 结尾 C 字符串。
Definition at line 401 of file libxr_string.hpp.
|
inlinenodiscardconstexpr |
Converts to a read-only string view. / 转换为只读字符串视图。
Definition at line 399 of file libxr_string.hpp.
|
inlinenodiscard |
使用绑定的 brace-style 格式重写当前内容。
Rewrite current content with the bound brace-style format.
Definition at line 341 of file libxr_string.hpp.
|
inlinenodiscard |
使用绑定的 printf-style 格式重写当前内容。
Rewrite current content with the bound printf-style format.
Definition at line 365 of file libxr_string.hpp.
|
inlinenodiscardprivate |
|
inlinenodiscardconstexpr |
Returns the text size excluding the trailing NUL. / 返回不含结尾 NUL 的文本长度。
Definition at line 393 of file libxr_string.hpp.
|
inlinenodiscardconstexpr |
|
inlinenodiscardconstexpr |
Returns the current read-only view. / 返回当前只读视图。
Definition at line 385 of file libxr_string.hpp.
|
private |
不含结尾 NUL 的已探测/分配容量。 / Probed/allocated payload capacity excluding the trailing NUL.
Definition at line 681 of file libxr_string.hpp.
|
private |
长期保留的 NUL 结尾存储;对象析构时不释放。 / Retained NUL-terminated storage; not released by the destructor.
Definition at line 677 of file libxr_string.hpp.
|
private |
不含结尾 NUL 的当前可见文本长度。 / Current visible payload size excluding the trailing NUL.
Definition at line 679 of file libxr_string.hpp.
|
private |
最近一次构造或重写状态。 / Status of the latest construction or rewrite.
Definition at line 683 of file libxr_string.hpp.