Sane C++ Libraries
C++ Platform Abstraction Libraries
Loading...
Searching...
No Matches
SC::String Struct Reference

A non-modifiable owning string with associated encoding. More...

#include <String.h>

Inheritance diagram for SC::String:
SC::SmallString< N >

Classes

struct  GrowableImplementation
 

Public Member Functions

 String (StringEncoding encoding=StringEncoding::Utf8)
 Builds an empty String with a given Encoding.
 
 String (StringSpan sv)
 Builds String from a StringSpan.
 
 String (Buffer &&otherData, StringEncoding encoding)
 Builds a String from a buffer ensuring zero termination.
 
template<size_t N>
 String (const char(&text)[N])
 Builds String with a null terminated char string literal.
 
bool owns (StringSpan view) const
 Checks if the memory pointed by the StringSpan is owned by this String.
 
bool assign (StringSpan sv)
 Assigns a StringSpan to this String, replacing existing contents.
 
StringEncoding getEncoding () const
 Get StringSpan encoding.
 
size_t sizeInBytesIncludingTerminator () const
 Get length of the string in bytes (including null terminator bytes)
 
const char * bytesIncludingTerminator () const
 Access current string content as read-only null-terminated const char*
 
bool isEmpty () const
 Check if String is empty.
 
StringSpan view () const SC_LANGUAGE_LIFETIME_BOUND
 Obtain a null-terminated StringSpan from current String.
 
bool operator== (const String &other) const
 Check if current String is same as other String.
 
bool operator!= (const String &other) const
 Check if current String is different from other String.
 
bool operator== (const StringSpan other) const
 Check if current String is same as other StringSpan.
 
bool operator!= (const StringSpan other) const
 Check if current String is different from other StringSpan.
 
template<size_t N>
bool operator== (const char(&other)[N]) const
 Check if current String is equal to the ascii string literal.
 
template<size_t N>
bool operator!= (const char(&other)[N]) const
 Check if current String is different from the ascii string literal.
 
bool operator< (const StringSpan other) const
 Check if current String is smaller to another StringView (using StringView::compare)
 
template<size_t N>
Stringoperator= (const char(&text)[N])
 Assigns an ascii string literal to current String.
 
Stringoperator= (StringSpan view)
 Assigns (copy) contents of given StringSpan in current String.
 

Protected Member Functions

 String (StringEncoding encoding, uint32_t inlineCapacity)
 
 String (Buffer &&otherData, StringEncoding encoding, uint32_t inlineCapacity)
 

Protected Attributes

StringEncoding encoding
 
Buffer data
 

Friends

struct StringTest
 
template<typename T >
struct GrowableBuffer
 

Detailed Description

A non-modifiable owning string with associated encoding.

SC::String is (currently) implemented as a SC::Vector with the associated string encoding. A SC::StringSpan can be obtained from it calling SC::String::view method but it's up to the user making sure that the usage of such SC::StringSpan doesn't exceed lifetime of the SC::String it originated from (but thankfully Address Sanitizer will catch the issue if it goes un-noticed).

Constructor & Destructor Documentation

◆ String() [1/4]

SC::String::String ( StringEncoding encoding = StringEncoding::Utf8)
inline

Builds an empty String with a given Encoding.

Parameters
encodingThe encoding of the String

◆ String() [2/4]

SC::String::String ( StringSpan sv)
inline

Builds String from a StringSpan.

Parameters
svStringSpan to be assigned to this String
Warning
This function will assert if StringSpan::assign fails

◆ String() [3/4]

SC::String::String ( Buffer && otherData,
StringEncoding encoding )

Builds a String from a buffer ensuring zero termination.

Warning
This function will assert if StringSpan::assign fails

◆ String() [4/4]

template<size_t N>
SC::String::String ( const char(&) text[N])
inline

Builds String with a null terminated char string literal.

Template Parameters
NLength of the string literal (including null terminator)
Parameters
textPointer to string literal
Warning
This function will assert if StringSpan::assign fails

Member Function Documentation

◆ assign()

bool SC::String::assign ( StringSpan sv)
nodiscard

Assigns a StringSpan to this String, replacing existing contents.

Parameters
svStringSpan to be assigned to this string
Returns
true if StringSpan is assigned successfully
Note
This method will invalidate any StringSpan::view previously obtained

◆ bytesIncludingTerminator()

const char * SC::String::bytesIncludingTerminator ( ) const
inlinenodiscard

Access current string content as read-only null-terminated const char*

Returns
A null terminated const char*

◆ getEncoding()

StringEncoding SC::String::getEncoding ( ) const
inlinenodiscard

Get StringSpan encoding.

Returns
Current encoding for this String

◆ isEmpty()

bool SC::String::isEmpty ( ) const
inlinenodiscard

Check if String is empty.

Returns
true if String is empty

◆ operator!=() [1/3]

template<size_t N>
bool SC::String::operator!= ( const char(&) other[N]) const
inlinenodiscard

Check if current String is different from the ascii string literal.

Template Parameters
NLength of string literal, including null terminator
Parameters
otherThe string literal
Returns
true if the String is different from other

◆ operator!=() [2/3]

bool SC::String::operator!= ( const String & other) const
inlinenodiscard

Check if current String is different from other String.

Parameters
otherString to be checked
Returns
true if the two strings are different

◆ operator!=() [3/3]

bool SC::String::operator!= ( const StringSpan other) const
inlinenodiscard

Check if current String is different from other StringSpan.

Parameters
otherStringSpan to be checked
Returns
true if the String and StringSpan are different

◆ operator<()

bool SC::String::operator< ( const StringSpan other) const
inlinenodiscard

Check if current String is smaller to another StringView (using StringView::compare)

Parameters
otherStringView to be checked
Returns
true if the String is smaller than StringView (using StringView::compare)

◆ operator=() [1/2]

template<size_t N>
String & SC::String::operator= ( const char(&) text[N])
inline

Assigns an ascii string literal to current String.

Template Parameters
NLength of string literal, including null terminator
Parameters
textThe string literal
Returns
Reference to current String
Warning
Assignment operator will assert if String::assign fails

◆ operator=() [2/2]

String & SC::String::operator= ( StringSpan view)

Assigns (copy) contents of given StringSpan in current String.

Warning
Assignment operator will assert if String::assign fails

◆ operator==() [1/3]

template<size_t N>
bool SC::String::operator== ( const char(&) other[N]) const
inlinenodiscard

Check if current String is equal to the ascii string literal.

Template Parameters
NLength of string literal, including null terminator
Parameters
otherThe string literal
Returns
true if the String is the same as other

◆ operator==() [2/3]

bool SC::String::operator== ( const String & other) const
inlinenodiscard

Check if current String is same as other String.

Parameters
otherString to be checked
Returns
true if the two strings are equal

◆ operator==() [3/3]

bool SC::String::operator== ( const StringSpan other) const
inlinenodiscard

Check if current String is same as other StringSpan.

Parameters
otherStringSpan to be checked
Returns
true if the String and StringSpan are equal

◆ owns()

bool SC::String::owns ( StringSpan view) const
nodiscard

Checks if the memory pointed by the StringSpan is owned by this String.

Parameters
viewStringSpan to be checked
Returns
true if StringSpan memory belongs to this String

◆ sizeInBytesIncludingTerminator()

size_t SC::String::sizeInBytesIncludingTerminator ( ) const
inlinenodiscard

Get length of the string in bytes (including null terminator bytes)

Returns
Size in bytes including null terminator

◆ view()

StringSpan SC::String::view ( ) const
nodiscard

Obtain a null-terminated StringSpan from current String.

Returns
a null-terminated StringSpan from current String

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