Owned NUL-terminated wide buffer, safe to use across a DLL boundary. More...
#include <StormByte/wcstring.hxx>
Public Member Functions | |
Life | |
| WCString () noexcept | |
| Empty (null) buffer. | |
| WCString (const wchar_t *str) noexcept | |
Copies str. | |
| WCString (std::wstring_view sv) noexcept | |
Copies sv onto Base's heap. | |
| WCString (const std::wstring &str) noexcept | |
Copies str onto Base's heap. | |
| WCString (const CString &text) noexcept | |
Copies text as wide characters. | |
| WCString (const WCString &other) noexcept | |
| Copy constructor. | |
| WCString (WCString &&other) noexcept | |
| Move constructor. | |
| ~WCString () noexcept | |
| Releases the buffer. | |
| WCString & | operator= (const WCString &other) noexcept |
| Copy assignment. | |
| WCString & | operator= (WCString &&other) noexcept |
| Move assignment. | |
Modifiers | |
| void | Reset (const wchar_t *str=nullptr) noexcept |
Replaces the buffer with a copy of str. | |
| void | swap (WCString &other) noexcept |
Swaps buffers with other. | |
Observers | |
| Size | Length () const noexcept |
Character count (wcslen), or 0 when empty or null. | |
| wchar_t | operator[] (const Size &index) const noexcept |
Character at index. | |
| operator bool () const noexcept | |
true when the buffer pointer is not null. | |
Conversions | |
| operator const wchar_t * () const noexcept | |
| View of the owned buffer. | |
| operator std::wstring_view () const noexcept | |
| Non-owning view of the text. | |
| STORMBYTE_FORCE_INLINE | operator std::wstring () const |
| Copy of the text in the caller’s heap. | |
| STORMBYTE_FORCE_INLINE std::wostream & | operator<< (std::wostream &stream) const |
Writes the text to stream. | |
Comparison | |
| bool | operator== (const WCString &other) const noexcept |
| Content equality. | |
| bool | operator!= (const WCString &other) const noexcept |
| Content inequality. | |
| bool | operator== (const wchar_t *str) const noexcept |
| Content equality with a C wide string. | |
| bool | operator!= (const wchar_t *str) const noexcept |
| Content inequality with a C wide string. | |
| std::strong_ordering | operator<=> (const WCString &other) const noexcept |
| Content order. | |
| std::strong_ordering | operator<=> (const wchar_t *str) const noexcept |
| Content order against a C wide string. | |
Owned NUL-terminated wide buffer, safe to use across a DLL boundary.
This is not a replacement or reimplementation of std::wstring. The class is minimal on purpose: copy, move, reset, a C wide-string view, Length, subscript, equality, ordering, swap and conversions.
operator const wchar_t* is the analogue of std::wstring::c_str(). The pointer is valid only until this object is destroyed, moved from, assigned or Reset. Using it afterwards is use-after-free.
operator std::wstring_view is explicit and follows the same lifetime. A null buffer yields an empty view. The view covers [0, Length()) and does not include the trailing NUL.
operator bool is true when the pointer is not null. A buffer constructed from L"" is empty (Length() == 0) and valid. A default-constructed object is null.
Construction from std::wstring / std::wstring_view copies onto Base's heap. It is not a heap steal. An empty source yields L"", not a null buffer.
operator[] is an observer. Valid indices are [0, Length()]; Length() is the trailing NUL. A null buffer or an index past Length() is undefined and asserts when assertions are on.
Equality and <=> compare text, not addresses. Two nulls are equal. Null is not equal to L"". Null orders before any text.
operator std::wstring and operator<< are STORMBYTE_FORCE_INLINE so the caller CRT owns the string and the stream buffer. inline on an exported class can still be a call into this DLL.
If the text never leaves the module that created it, or the program is not built for Windows, use std::wstring.
|
noexcept |
Empty (null) buffer.
|
explicitnoexcept |
Copies str.
| str | Source; may be null. |
|
explicitnoexcept |
Copies sv onto Base's heap.
| sv | Source view. Copied up to the first NUL, then terminated. |
L"".
|
explicitnoexcept |
Copies str onto Base's heap.
| str | Source. Remains valid and unchanged. |
L"".
|
explicitnoexcept |
Copies text as wide characters.
Narrow text is UTF-8.
| text | Narrow text. Null stays null. |
|
noexcept |
Copy constructor.
| other | Buffer to copy. |
|
noexcept |
Move constructor.
| other | Buffer to take. other becomes null. |
|
noexcept |
Releases the buffer.
|
noexcept |
Character count (wcslen), or 0 when empty or null.
|
inlineexplicitnoexcept |
true when the buffer pointer is not null.
L"" is valid and empty. A default object is null.
|
explicitnoexcept |
View of the owned buffer.
std::wstring::c_str().
|
inline |
Copy of the text in the caller’s heap.
|
inlineexplicitnoexcept |
Non-owning view of the text.
std::wstring::c_str().
|
inlinenoexcept |
Content inequality with a C wide string.
| str | May be null. |
|
inlinenoexcept |
Content inequality.
| other | Other buffer. |
|
inline |
Writes the text to stream.
| stream | Destination. |
stream.
|
noexcept |
Content order against a C wide string.
| str | May be null. |
|
noexcept |
Content order.
Null is less than any text.
| other | Other buffer. |
Copy assignment.
| other | Buffer to copy. |
Move assignment.
| other | Buffer to take. other becomes null. |
|
noexcept |
Content equality with a C wide string.
| str | May be null (treated as a null WCString). |
|
noexcept |
Content equality.
| other | Other buffer. |
|
noexcept |
|
noexcept |
Replaces the buffer with a copy of str.
| str | Source; may be null. |
|
noexcept |
Swaps buffers with other.
| other | Other buffer. |