13template<
typename TChar>
14requires alib::characters::IsCharacter<TChar>
class TString;
15template<
typename TChar>
class TCString;
17template<
typename TChar,
typename TAllocator>
18requires alib::lang::IsAllocator<TAllocator>
class TAString;
39template<
typename TFrom,
82template<
typename TChar>
94 #if ALIB_DEBUG_STRINGS && !DOXYGEN
95 void dbgCheck()
const;
193 template <
typename T>
196 template <
typename T>
198 constexpr TString(
const T& src) noexcept
204 constexpr explicit TString(
const T& src) noexcept
238 template<
typename TAllocator>
246 auto* newBuf= allocator().template AllocArray<TChar>( copy.
length);
269 template<
typename T>
270 constexpr operator T()
const;
272 template<
typename T>
276 std::remove_cv_t<T> >::value )
278 constexpr operator T()
const
281 template<
typename T>
285 std::remove_cv_t<T> >::value )
286 constexpr explicit operator T()
const
371 template <
typename TCheck= CHK>
375 if constexpr ( TCheck::value ) {
383 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
384 regionStart, regionLength, rs, rl )
402 template <
typename TCheck= CHK>
404 if constexpr ( TCheck::value )
408 "Non checking version: Index out of range: 0 <= {} < {}.", idx,
length )
420 template <
typename TCheck= CHK>
422 if constexpr ( TCheck::value )
439 template <
typename TCheck= CHK>
441 if constexpr ( TCheck::value )
474 "Index out of bounds: 0 <= {} < {}.", idx,
length )
517 template <
typename TCheck =
CHK,
522 if constexpr ( TCheck::value ) {
570 template <
typename TCheck =
CHK,
576 if (TCheck::value &&
IsNull() )
return rhs.
IsNull() ? 0 : -1;
577 if (TCheck::value && rhs.
IsNull() )
return +1;
580 if ( TCheck::value &&
length == 0 )
return rhs.
length == 0 ? 0 : -1;
581 if ( rhs.
length == 0 )
return +1;
592 return thisIsShorter ? -1 : 1;
617 template <
typename TCheck =
CHK,
622 if constexpr ( TCheck::value ) {
625 cmpSub.
buffer+= rhsRegionStart;
626 cmpSub.
length= rhsRegionLength;
661 template <
typename TCheck =
CHK,
668 if constexpr ( TCheck::value ) {
671 cmpSub.
buffer+= rhsRegionStart;
672 cmpSub.
length= rhsRegionLength;
675 return TString(
buffer + regionStart, regionLength ).CompareTo<
CHK, TSensitivity>( cmpSub );
701 template<
typename TCheck =
CHK,
706 if constexpr ( TCheck::value ) {
707 if ( pos < 0 || pos + needleLength >
length || needle.
IsNull () )
709 if ( needleLength == 0 )
713 "STRINGS",
"Non checking and index out of range: 0 <= {}, {} <= {}.",
714 pos, pos + needleLength,
length )
716 "STRINGS",
"Non checking and emtpy compare string" )
737 template<
typename TCheck =
CHK,
740 if constexpr ( TCheck::value ) {
747 "Non checking and needle longer than this string: {} > {}",
750 "Non checking and emtpy needle given." )
766 template<
typename TCheck =
CHK,
769 if constexpr ( TCheck::value ) {
776 "Non checking and needle longer than this string: {} > {}",
779 "Non checking and emtpy needle given." )
802 template <
typename TCheck= CHK>
806 if constexpr ( TCheck::value ) {
808 if ( startIdx < 0 ) startIdx= 0;
809 else if ( startIdx >=
length )
return -1;
812 "Non checking and index out of range: 0 <= {} < {}.", startIdx,
length )
817 return result !=
nullptr ? result -
buffer
830 template <
typename TCheck= CHK>
834 if constexpr ( TCheck::value ) {
843 && rs == regionStart && rl == regionLength,
"STRINGS",
844 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
845 regionStart, regionLength, rs, rl )
851 return result !=
nullptr ? result -
buffer
867 return result !=
nullptr ? result -
buffer
882 template <
typename TCheck= CHK>
885 if constexpr ( TCheck::value ) {
887 if ( startIdx < 0 ) startIdx= 0;
891 "Non checking and index out of range: 0 <= {} < {}.", startIdx,
length )
895 return result !=
nullptr ? result -
buffer
912 template <
typename TCheck= CHK>
916 if constexpr ( TCheck::value ) {
918 if ( startIndex < 0 )
return -1;
922 "Non checking and index out of range: 0 <= {} < {}.", startIndex,
length )
925 while( startIndex >= 0 &&
buffer[ startIndex ] != needle )
960 typename TCheck =
CHK>
962 if constexpr ( TCheck::value ) {
963 if ( startIdx < 0 ) startIdx= 0;
964 if ( startIdx >=
length )
return -1;
967 "STRINGS",
"Non checking and illegal parameters: 0 <= {} < {}. Needles: {}",
976 return idx == -1 ? -1 : startIdx + idx;
1000 typename TCheck =
CHK>
1002 if constexpr ( TCheck::value ) {
1003 if ( startIdx < 0 )
return -1;
1007 "STRINGS",
"Non checking and illegal parameters: 0 <= {} < {}. Needles: {}",
1036 template<
typename TCheck =
CHK,
1041 if constexpr ( TCheck::value ) {
1044 if ( startIdx < 0 ) startIdx= 0;
1045 endIdx= (std::min) (endIdx,
length - needle.
Length() + 1 );
1046 if ( startIdx >= endIdx )
return -1;
1055 "STRINGS",
"Non checking and illegal parameters: 0 <= {} <= {}, {} <= {}. Needles: {}",
1078 template <
typename TCheck= CHK>
1081 integer startIdx = 0 )
const {
1084 if constexpr ( TCheck::value ) {
1086 if ( startIdx < 0 ) startIdx= 0;
1087 else if ( startIdx >=
length )
return startIdx;
1090 "Non checking and index out of range: 0 <= {} < {}.", startIdx,
length )
1131 template <
typename TCheck= CHK>
1133 integer startPos = 0 )
const {
1135 if constexpr ( TCheck::value ) {
1137 if ( startPos < 0 ) startPos= 0;
1138 else if ( startPos >=
length )
return 0;
1141 "Non checking and index out of range: 0 <= {} < {}.", startPos,
length )
1146 while( startPos <
length && (startPos=
IndexOf<NC>( needle, startPos )) >= 0 ) {
1167 template <
typename TCheck= CHK>
1172 if constexpr ( TCheck::value ) {
1174 if ( startPos < 0 ) startPos= 0;
1175 else if ( startPos >=
length )
return 0;
1178 "Non checking and index out of range: 0 <= {} < {}.", startPos,
length )
1182 while( startPos <
length && (startPos=
IndexOf<NC>( needle, startPos )) >= 0 ) {
1184 if( startPos <
Length() && *(
buffer + startPos) == omit )
1207 template<
typename TCheck =
CHK,
1210 integer startPos = 0 )
const {
1215 if constexpr ( TCheck::value ) {
1216 if ( startPos < 0 ) startPos= 0;
1217 if ( startPos + nLen >
length )
return 0;
1220 "Non checking and index out of range: 0 <= {} < {}.", startPos,
length )
1225 startPos+= needle.
Length();
1249 template<
typename TCheck =
CHK,
1253 integer startPos = 0 )
const {
1258 if constexpr ( TCheck::value ) {
1259 if ( startPos < 0 ) startPos= 0;
1260 if ( startPos + nLen >
length )
return 0;
1263 "Non checking and index out of range: 0 <= {} < {}.", startPos,
length )
1327 integer* newIdx=
nullptr )
const;
1340 {
return ParseInt( 0, numberFormat, newIdx ); }
1366 {
return ParseInt( startIdx,
nullptr, newIdx ); }
1397 integer* newIdx=
nullptr )
const;
1410 {
return ParseDec( 0, numberFormat, newIdx ); }
1436 {
return ParseDec( startIdx,
nullptr, newIdx ); }
1463 integer* newIdx=
nullptr )
const;
1477 {
return ParseBin( 0, numberFormat, newIdx ); }
1503 {
return ParseBin( startIdx,
nullptr, newIdx ); }
1530 integer* newIdx=
nullptr )
const;
1544 {
return ParseHex( 0, numberFormat, newIdx ); }
1570 {
return ParseHex( startIdx,
nullptr, newIdx ); }
1597 integer* newIdx=
nullptr )
const;
1611 {
return ParseOct( 0, numberFormat, newIdx ); }
1637 {
return ParseOct( startIdx,
nullptr, newIdx ); }
1664 integer* newIdx=
nullptr )
const;
1677 {
return ParseFloat( 0, numberFormat, newIdx ); }
1703 {
return ParseFloat( startIdx,
nullptr, newIdx ); }
1732 template<
typename TAllocator>
1740 auto* newBuf= allocator().template AllocArray<TChar>( copy.
length );
1759 template<
typename TAllocator>
1761 void Free( TAllocator& allocator ) {
1782 if (regionStart >=
length) {
1789 if (regionStart < 0 ) {
1790 regionLength+= regionStart;
1795 if ( regionLength < 0 ) {
1801 if ( regionLength > maxRegionLength )
1802 regionLength= maxRegionLength;
1805 return regionLength == 0;
1818 template<
typename TCharConstOrMutable>
1830 TCharConstOrMutable*
p;
2011 template<lang::Case TSensitivity =lang::Case::Sensitive>
2026template<
typename TChar>
struct ArrayTraits<
strings::TString<TChar>, TChar>
2031 static constexpr const TChar*
Buffer (
const T& src) {
return src.
Buffer(); }
2032 static constexpr integer Length (
const T& src) {
return src.Length(); }
2033 static constexpr T
Construct(
const TChar* b,
integer l) {
return T(b, l); }
2036template<
typename TChar>
struct ZTArrayTraits<strings::TString<TChar>, TChar>
2038 using T= strings::TString<TChar>;
2041 static constexpr const TChar*
Buffer(
const T& src) {
return src.Buffer(); }
2042 static constexpr integer Length(
const T& src) {
return src.Length(); }
2043 static constexpr T
Construct(
const TChar* b,
integer l ) {
return T(b, l); }
2083template<
typename TChar>
2084bool operator== (
const TString<TChar>& lhs,
const TString<TChar>& rhs)
2085{
return lhs.
template Equals <CHK, lang::Case::Sensitive>(rhs); }
2088template<
typename TChar,
typename T>
2089requires (!std::is_same_v<T, TString<TChar>>)
2090bool operator== (
const TString<TChar>& lhs,
const T& rhs)
2091{
return lhs.
template Equals <CHK, lang::Case::Sensitive>(rhs); }
2094template<
typename TChar>
2096{
return lhs.
template CompareTo<CHK, lang::Case::Sensitive>(rhs); }
2099template<
typename TChar,
typename T>
2100requires (!std::same_as<TString<TChar>, T>)
2102{
return lhs.
template CompareTo<CHK, lang::Case::Sensitive>(rhs); }
2114extern template ALIB_DLL integer TString<nchar>::indexOfString<lang::Case::Sensitive>(
const TString<nchar >&, integer, integer )
const;
2115extern template ALIB_DLL integer TString<nchar>::indexOfString<lang::Case::Ignore >(
const TString<nchar >&, integer, integer )
const;
2116extern template ALIB_DLL integer TString<nchar>::IndexOfSegmentEnd ( nchar, nchar, integer )
const;
2117extern template ALIB_DLL uint64_t TString<nchar>::ParseDecDigits ( integer, integer* )
const;
2118extern template ALIB_DLL int64_t TString<nchar>::ParseInt ( integer, TNumberFormat<nchar>*, integer* )
const;
2119extern template ALIB_DLL uint64_t TString<nchar>::ParseDec ( integer, TNumberFormat<nchar>*, integer* )
const;
2120extern template ALIB_DLL uint64_t TString<nchar>::ParseBin ( integer, TNumberFormat<nchar>*, integer* )
const;
2121extern template ALIB_DLL uint64_t TString<nchar>::ParseHex ( integer, TNumberFormat<nchar>*, integer* )
const;
2122extern template ALIB_DLL uint64_t TString<nchar>::ParseOct ( integer, TNumberFormat<nchar>*, integer* )
const;
2123extern template ALIB_DLL double TString<nchar>::ParseFloat ( integer, TNumberFormat<nchar>*, integer* )
const;
2124extern template ALIB_DLL size_t TString<nchar>::Hashcode ()
const;
2125extern template ALIB_DLL size_t TString<nchar>::HashcodeIgnoreCase ()
const;
2127template<>
inline integer TString<wchar>::WStringLength ()
const {
return length; }
2128extern template ALIB_DLL integer TString<wchar>::indexOfString<lang::Case::Sensitive>(
const TString<wchar>&, integer, integer )
const;
2129extern template ALIB_DLL integer TString<wchar>::indexOfString<lang::Case::Ignore >(
const TString<wchar>&, integer, integer )
const;
2130extern template ALIB_DLL integer TString<wchar>::IndexOfSegmentEnd (wchar, wchar, integer )
const;
2131extern template ALIB_DLL uint64_t TString<wchar>::ParseDecDigits ( integer, integer* )
const;
2132extern template ALIB_DLL int64_t TString<wchar>::ParseInt ( integer, TNumberFormat<wchar>*, integer* )
const;
2133extern template ALIB_DLL uint64_t TString<wchar>::ParseDec ( integer, TNumberFormat<wchar>*, integer* )
const;
2134extern template ALIB_DLL uint64_t TString<wchar>::ParseBin ( integer, TNumberFormat<wchar>*, integer* )
const;
2135extern template ALIB_DLL uint64_t TString<wchar>::ParseHex ( integer, TNumberFormat<wchar>*, integer* )
const;
2136extern template ALIB_DLL uint64_t TString<wchar>::ParseOct ( integer, TNumberFormat<wchar>*, integer* )
const;
2137extern template ALIB_DLL double TString<wchar>::ParseFloat ( integer, TNumberFormat<wchar>*, integer* )
const;
2138extern template ALIB_DLL size_t TString<wchar>::Hashcode ()
const;
2139extern template ALIB_DLL size_t TString<wchar>::HashcodeIgnoreCase ()
const;
2142extern template ALIB_DLL integer TString<xchar>::indexOfString<lang::Case::Sensitive>(
const TString<xchar >&, integer, integer )
const;
2143extern template ALIB_DLL integer TString<xchar>::indexOfString<lang::Case::Ignore >(
const TString<xchar >&, integer, integer )
const;
2144extern template ALIB_DLL integer TString<xchar>::IndexOfSegmentEnd ( xchar, xchar, integer )
const;
2145extern template ALIB_DLL uint64_t TString<xchar>::ParseDecDigits ( integer, integer* )
const;
2146extern template ALIB_DLL int64_t TString<xchar>::ParseInt ( integer, TNumberFormat<xchar>*, integer* )
const;
2147extern template ALIB_DLL uint64_t TString<xchar>::ParseDec ( integer, TNumberFormat<xchar>*, integer* )
const;
2148extern template ALIB_DLL uint64_t TString<xchar>::ParseBin ( integer, TNumberFormat<xchar>*, integer* )
const;
2149extern template ALIB_DLL uint64_t TString<xchar>::ParseHex ( integer, TNumberFormat<xchar>*, integer* )
const;
2150extern template ALIB_DLL uint64_t TString<xchar>::ParseOct ( integer, TNumberFormat<xchar>*, integer* )
const;
2151extern template ALIB_DLL double TString<xchar>::ParseFloat ( integer, TNumberFormat<xchar>*, integer* )
const;
2152extern template ALIB_DLL size_t TString<xchar>::Hashcode ()
const;
2153extern template ALIB_DLL size_t TString<xchar>::HashcodeIgnoreCase ()
const;
2158#if ALIB_DEBUG_STRINGS
2159 extern template ALIB_DLL void TString<nchar>::dbgCheck()
const;
2160 extern template ALIB_DLL void TString<wchar>::dbgCheck()
const;
2161 extern template ALIB_DLL void TString<xchar>::dbgCheck()
const;
2224template<>
struct StringConstantsTraits<nchar> {
constexpr static NString EmptyString() {
return "" ; } };
2225template<>
struct StringConstantsTraits<wchar> {
constexpr static WString EmptyString() {
return A_WCHAR(
""); } };
2226template<>
struct StringConstantsTraits<xchar> {
constexpr static XString EmptyString() {
return A_XCHAR(
""); } };
#define ALIB_POP_ALLOWANCE
#define ALIB_ALLOW_NULL_POINTER_PASSING
#define ALIB_ASSERT_ERROR(cond, domain,...)
TRandomAccessIterator operator--(int)
bool operator>=(TRandomAccessIterator other) const
TRandomAccessIterator operator+(integer n) const
bool operator!=(TRandomAccessIterator other) const
TCharConstOrMutable * pointer
Implementation of std::iterator_traits.
TRandomAccessIterator & operator-=(integer n)
integer operator-(TRandomAccessIterator other) const
TCharConstOrMutable value_type
Implementation of std::iterator_traits.
bool operator==(TRandomAccessIterator other) const
TRandomAccessIterator operator++(int)
TCharConstOrMutable & reference
Implementation of std::iterator_traits.
TRandomAccessIterator & operator+=(integer n)
TRandomAccessIterator(TCharConstOrMutable *start=nullptr)
integer difference_type
Implementation of std::iterator_traits.
bool operator<=(TRandomAccessIterator other) const
TRandomAccessIterator operator-(integer n) const
TCharConstOrMutable & operator*()
bool operator>(TRandomAccessIterator other) const
TCharConstOrMutable & operator*() const
TRandomAccessIterator & operator++()
bool operator<(TRandomAccessIterator other) const
TCharConstOrMutable & operator[](integer n) const
TRandomAccessIterator & operator--()
std::random_access_iterator_tag iterator_category
Implementation of std::iterator_traits.
int64_t ParseInt(integer startIdx, integer *newIdx) const
TChar operator[](integer idx) const
int CompareTo(const TString &rhs, integer rhsRegionStart, integer rhsRegionLength=MAX_LEN) const
integer CopyTo(TChar *dest) const
double ParseFloat(integer startIdx, integer *newIdx) const
uint64_t ParseDec(integer startIdx=0, TNumberFormat< TChar > *numberFormat=nullptr, integer *newIdx=nullptr) const
constexpr TString(lang::IsNullptr auto const &) noexcept
Constructor accepting nullptr. Constructs a nulled string.
uint64_t ParseDec(integer startIdx, integer *newIdx) const
uint64_t ParseHex(integer startIdx, integer *newIdx) const
const_iterator cbegin() const
uint64_t ParseBin(integer *newIdx) const
const_reverse_iterator rend() const
constexpr TString(T &src) noexcept
uint64_t ParseDecDigits(integer startIdx=0, integer *newIdx=nullptr) const
integer IndexOfOrLength(TChar needle, integer startIdx) const
constexpr integer Length() const
constexpr TString(const T &src) noexcept
constexpr bool IsEmpty() const
bool EndsWith(const TString &needle) const
TChar CharAtStart() const
const CharacterType * buffer
integer IndexOf(TChar needle, integer startIdx=0) const
constexpr bool IsNotNull() const
const_reverse_iterator rbegin() const
uint64_t ParseHex(integer *newIdx) const
uint64_t ParseOct(integer startIdx, integer *newIdx) const
TString(TAllocator &allocator, const TString< TChar > ©)
std::size_t HashcodeIgnoreCase() const
integer IndexOfFirstDifference(const TString &needle, lang::Case sensitivity=lang::Case::Sensitive, integer startIdx=0) const
double ParseFloat(integer startIdx=0, TNumberFormat< TChar > *numberFormat=nullptr, integer *newIdx=nullptr) const
uint64_t ParseDec(TNumberFormat< TChar > *numberFormat, integer *newIdx=nullptr) const
uint64_t ParseHex(TNumberFormat< TChar > *numberFormat, integer *newIdx=nullptr) const
void Allocate(TAllocator &allocator, const TString< TChar > ©)
TRandomAccessIterator< const CharacterType > const_iterator
integer CountChar(TChar needle, TChar omit, integer startPos) const
std::size_t Hashcode() const
TChar CharAt(integer idx) const
const_reverse_iterator crend() const
int64_t ParseInt(integer startIdx=0, TNumberFormat< TChar > *numberFormat=nullptr, integer *newIdx=nullptr) const
constexpr bool IsNotEmpty() const
const_iterator end() const
bool AdjustRegion(integer ®ionStart, integer ®ionLength) const
bool ContainsAt(const TString &needle, integer pos) const
integer IndexOfAny(const TString &needles, integer startIdx=0) const
constexpr const CharacterType * Buffer() const
uint64_t ParseBin(integer startIdx=0, TNumberFormat< TChar > *numberFormat=nullptr, integer *newIdx=nullptr) const
const_iterator begin() const
integer IndexOf(const TString &needle, integer startIdx=0, integer endIdx=strings::MAX_LEN) const
const_iterator cend() const
uint64_t ParseOct(TNumberFormat< TChar > *numberFormat, integer *newIdx=nullptr) const
integer Count(const TString &needle, integer startPos=0) const
std::reverse_iterator< const_iterator > const_reverse_iterator
integer IndexOf(TChar needle, integer regionStart, integer regionLength) const
int64_t ParseInt(integer *newIdx) const
uint64_t ParseHex(integer startIdx=0, TNumberFormat< TChar > *numberFormat=nullptr, integer *newIdx=nullptr) const
integer WStringLength() const
integer indexOfString(const TString &needle, integer startIdx, integer endIdx) const
integer LastIndexOf(TChar needle, integer startIndex=MAX_LEN) const
uint64_t ParseBin(integer startIdx, integer *newIdx) const
uint64_t ParseOct(integer *newIdx) const
double ParseFloat(integer *newIdx) const
constexpr TString() noexcept=default
TString(const_iterator &start, const_iterator &end)
integer IndexOfSegmentEnd(TChar opener, TChar closer, integer idx) const
int CompareTo(const TString &rhs, integer rhsRegionStart, integer rhsRegionLength, integer regionStart, integer regionLength=MAX_LEN) const
TString< TChar > Substring(integer regionStart, integer regionLength=MAX_LEN) const
uint64_t ParseOct(integer startIdx=0, TNumberFormat< TChar > *numberFormat=nullptr, integer *newIdx=nullptr) const
integer CountChar(TChar needle, integer startPos=0) const
int64_t ParseInt(TNumberFormat< TChar > *numberFormat, integer *newIdx=nullptr) const
uint64_t ParseDec(integer *newIdx) const
const_reverse_iterator crbegin() const
bool Equals(const TString< TChar > &rhs) const
constexpr bool IsNull() const
bool StartsWith(const TString &needle) const
integer IndexOfOrLength(TChar needle) const
void Free(TAllocator &allocator)
integer Count(const TString &needle, const TString &omit, integer startPos=0) const
integer LastIndexOfAny(const TString &needles, integer startIdx=MAX_LEN) const
uint64_t ParseBin(TNumberFormat< TChar > *numberFormat, integer *newIdx=nullptr) const
int CompareTo(const TString< TChar > &rhs) const
double ParseFloat(TNumberFormat< TChar > *numberFormat, integer *newIdx=nullptr) const
const TChar * Search(const TChar *haystack, integer haystackLength, TChar needle)
void Copy(const TChar *src, integer length, TChar *dest)
integer IndexOfFirstDifference(const TChar *haystack, integer haystackLength, const TChar *needle, integer needleLength, lang::Case sensitivity)
integer LastIndexOfAnyExclude(const TChar *haystack, integer startIdx, const TChar *needles, integer needlesLength)
integer LastIndexOfAnyInclude(const TChar *haystack, integer startIdx, const TChar *needles, integer needlesLength)
int Compare(const TChar *lhs, const TChar *rhs, integer cmpLength)
bool Equal(TChar lhs, TRhs rhs)
integer IndexOfAnyIncluded(const TChar *haystack, integer haystackLength, const TChar *needles, integer needlesLength)
integer IndexOfAnyExcluded(const TChar *haystack, integer haystackLength, const TChar *needles, integer needlesLength)
int CompareIgnoreCase(const TChar *lhs, const TChar *rhs, integer cmpLength)
Case
Denotes upper and lower case character treatment.
platform_specific integer
Inclusion
Denotes how members of a set something should be taken into account.
@ Include
Chooses inclusion.
constexpr integer MAX_LEN
The maximum length of an ALib string.
auto operator<=>(const String &lhs, const String &rhs)
strings::TString< nchar > NString
Type alias in namespace alib.
constexpr NString NULL_NSTRING
A nulled string of the narrow character type.
constexpr String NULL_STRING
A nulled string of the default character type.
constexpr ComplementString NULL_COMPLEMENT_STRING
A nulled string of the complement character type.
strings::TString< wchar > WString
Type alias in namespace alib.
constexpr ComplementString EMPTY_COMPLEMENT_STRING
An empty string of the complement character type.
strings::TString< xchar > XString
Type alias in namespace alib.
constexpr NString EMPTY_NSTRING
An empty string of the narrow character type.
constexpr const String EMPTY_STRING
An empty string of the default character type.
lang::integer integer
Type alias in namespace alib.
constexpr WString NULL_WSTRING
A nulled string of the wide character type.
strings::TString< character > String
Type alias in namespace alib.
constexpr XString NULL_XSTRING
A nulled string of the complement character type.
constexpr StrangeString EMPTY_STRANGE_STRING
An empty string of the strange character type.
strings::TString< complementChar > ComplementString
Type alias in namespace alib.
constexpr WString EMPTY_WSTRING
An empty string of the wide character type.
constexpr StrangeString NULL_STRANGE_STRING
A nulled string of the strange character type.
constexpr XString EMPTY_XSTRING
An empty string of the complement character type.
strings::TString< strangeChar > StrangeString
Type alias in namespace alib.
#define ALIB_STRING_DBG_CHK(instance)
static constexpr Policy Access
static integer Length(const TStringSource &src)
static TStringSource Construct(const TChar *array, integer length)
static constexpr Policy Construction
static const TChar * Buffer(const TStringSource &src)
static constexpr Policy Construction
static constexpr Policy Access
static const TChar * Buffer(const TStringSource &src)
static TStringSource Construct(const TChar *array, integer length)
static integer Length(const TStringSource &src)
static constexpr String< TChar > EmptyString()