StormByte 2.0.0
C++26 foundation of the StormByte suite
 
Loading...
Searching...
No Matches
StormByte::CString Class Reference

Owned NUL-terminated buffer, safe to use across a DLL boundary. More...

#include <StormByte/cstring.hxx>

Public Member Functions

Life
 CString () noexcept
 Empty (null) buffer.
 
 CString (const char *str) noexcept
 Copies str.
 
 CString (const CString &other) noexcept
 Copy constructor.
 
 CString (CString &&other) noexcept
 Move constructor.
 
 ~CString () noexcept
 Releases the buffer.
 
CStringoperator= (const CString &other) noexcept
 Copy assignment.
 
CStringoperator= (CString &&other) noexcept
 Move assignment.
 
Modifiers
void Reset (const char *str=nullptr) noexcept
 Replaces the buffer with a copy of str.
 
void swap (CString &other) noexcept
 Swaps buffers with other.
 
Observers
std::size_t Length () const noexcept
 Character count (strlen), or 0 when empty or null.
 
char operator[] (std::size_t index) const noexcept
 Character at index.
 
 operator bool () const noexcept
 true when the buffer pointer is not null.
 
Conversions
 operator const char * () const noexcept
 View of the owned buffer.
 
 operator std::string_view () const noexcept
 Non-owning view of the text.
 
 operator std::string () const
 Copy of the text in the caller’s heap.
 
std::ostream & operator<< (std::ostream &stream) const
 Writes the text to stream.
 
Comparison
bool operator== (const CString &other) const noexcept
 Content equality.
 
bool operator!= (const CString &other) const noexcept
 Content inequality.
 
bool operator== (const char *str) const noexcept
 Content equality with a C string.
 
bool operator!= (const char *str) const noexcept
 Content inequality with a C string.
 
std::strong_ordering operator<=> (const CString &other) const noexcept
 Content order.
 
std::strong_ordering operator<=> (const char *str) const noexcept
 Content order against a C string.
 

Detailed Description

Owned NUL-terminated buffer, safe to use across a DLL boundary.

This is not a replacement or reimplementation of std::string. The class is minimal on purpose: copy, move, reset, a C-string view, Length, subscript, equality, ordering, swap and conversions.

operator const char* is the analogue of std::string::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::string_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 "" is empty (Length() == 0) and valid. A default-constructed object is null.

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 "". Null orders before any text.

operator std::string, operator std::string_view and operator<< are inline so they run in the caller’s translation unit.

If the text never leaves the module that created it, or the program is not built for Windows, use std::string.

Constructor & Destructor Documentation

◆ CString() [1/4]

StormByte::CString::CString ( )
noexcept

Empty (null) buffer.

◆ CString() [2/4]

StormByte::CString::CString ( const char *  str)
explicitnoexcept

Copies str.

Parameters
strSource; may be null.

◆ CString() [3/4]

StormByte::CString::CString ( const CString other)
noexcept

Copy constructor.

Parameters
otherBuffer to copy.

◆ CString() [4/4]

StormByte::CString::CString ( CString &&  other)
noexcept

Move constructor.

Parameters
otherBuffer to take. other becomes null.

◆ ~CString()

StormByte::CString::~CString ( )
noexcept

Releases the buffer.

Member Function Documentation

◆ Length()

std::size_t StormByte::CString::Length ( ) const
noexcept

Character count (strlen), or 0 when empty or null.

Returns
Length.

◆ operator bool()

StormByte::CString::operator bool ( ) const
inlineexplicitnoexcept

true when the buffer pointer is not null.

Note
"" is valid and empty. A default object is null.
Returns
Whether a buffer is held.

◆ operator const char *()

StormByte::CString::operator const char * ( ) const
explicitnoexcept

View of the owned buffer.

Returns
Buffer, or null.
Note
Same lifetime rules as std::string::c_str().

◆ operator std::string()

StormByte::CString::operator std::string ( ) const
inline

Copy of the text in the caller’s heap.

Returns
Empty string when the buffer is null.

◆ operator std::string_view()

StormByte::CString::operator std::string_view ( ) const
inlineexplicitnoexcept

Non-owning view of the text.

Returns
Empty view when the buffer is null.
Note
Same lifetime rules as std::string::c_str().

◆ operator!=() [1/2]

bool StormByte::CString::operator!= ( const char *  str) const
inlinenoexcept

Content inequality with a C string.

Parameters
strMay be null.
Returns
Whether the texts differ.

◆ operator!=() [2/2]

bool StormByte::CString::operator!= ( const CString other) const
inlinenoexcept

Content inequality.

Parameters
otherOther buffer.
Returns
Whether the texts differ.

◆ operator<<()

std::ostream & StormByte::CString::operator<< ( std::ostream &  stream) const
inline

Writes the text to stream.

Parameters
streamDestination.
Returns
stream.

◆ operator<=>() [1/2]

std::strong_ordering StormByte::CString::operator<=> ( const char *  str) const
noexcept

Content order against a C string.

Parameters
strMay be null.
Returns
Ordering.

◆ operator<=>() [2/2]

std::strong_ordering StormByte::CString::operator<=> ( const CString other) const
noexcept

Content order.

Null is less than any text.

Parameters
otherOther buffer.
Returns
Ordering.

◆ operator=() [1/2]

CString & StormByte::CString::operator= ( const CString other)
noexcept

Copy assignment.

Parameters
otherBuffer to copy.
Returns
*this.

◆ operator=() [2/2]

CString & StormByte::CString::operator= ( CString &&  other)
noexcept

Move assignment.

Parameters
otherBuffer to take. other becomes null.
Returns
*this.

◆ operator==() [1/2]

bool StormByte::CString::operator== ( const char *  str) const
noexcept

Content equality with a C string.

Parameters
strMay be null (treated as a null CString).
Returns
Whether the texts are equal.

◆ operator==() [2/2]

bool StormByte::CString::operator== ( const CString other) const
noexcept

Content equality.

Parameters
otherOther buffer.
Returns
Whether the texts are equal.

◆ operator[]()

char StormByte::CString::operator[] ( std::size_t  index) const
noexcept

Character at index.

Parameters
indexPosition in [0, Length()]. Length() is the trailing NUL.
Returns
The character.
Note
Null or index > Length() is undefined. Checked with assert when assertions are on.

◆ Reset()

void StormByte::CString::Reset ( const char *  str = nullptr)
noexcept

Replaces the buffer with a copy of str.

Parameters
strSource; may be null.

◆ swap()

void StormByte::CString::swap ( CString other)
noexcept

Swaps buffers with other.

Parameters
otherOther buffer.

The documentation for this class was generated from the following file: