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,
81template<
typename TChar>
92 #if ALIB_DEBUG_STRINGS && !DOXYGEN
93 void dbgCheck()
const;
189 template <
typename T>
192 template <
typename T>
194 constexpr TString(
const T& src) noexcept
200 constexpr explicit TString(
const T& src) noexcept
234 template<
typename TAllocator>
242 auto* newBuf= allocator().template AllocArray<TChar>( copy.
length);
265 template<
typename T>
266 constexpr operator T()
const;
268 template<
typename T>
272 std::remove_cv_t<T> >::value )
274 constexpr operator T()
const
277 template<
typename T>
281 std::remove_cv_t<T> >::value )
282 constexpr explicit operator T()
const
367 template <
typename TCheck= CHK>
371 if constexpr ( TCheck::value ) {
379 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
380 regionStart, regionLength, rs, rl )
398 template <
typename TCheck= CHK>
400 if constexpr ( TCheck::value )
404 "Non checking version: Index out of range: 0 <= {} < {}.", idx,
length )
416 template <
typename TCheck= CHK>
418 if constexpr ( TCheck::value )
435 template <
typename TCheck= CHK>
437 if constexpr ( TCheck::value )
470 "Index out of bounds: 0 <= {} < {}.", idx,
length )
513 template <
typename TCheck =
CHK,
518 if constexpr ( TCheck::value ) {
566 template <
typename TCheck =
CHK,
572 if (TCheck::value &&
IsNull() )
return rhs.
IsNull() ? 0 : -1;
573 if (TCheck::value && rhs.
IsNull() )
return +1;
576 if ( TCheck::value &&
length == 0 )
return rhs.
length == 0 ? 0 : -1;
577 if ( rhs.
length == 0 )
return +1;
588 return thisIsShorter ? -1 : 1;
613 template <
typename TCheck =
CHK,
618 if constexpr ( TCheck::value ) {
621 cmpSub.
buffer+= rhsRegionStart;
622 cmpSub.
length= rhsRegionLength;
657 template <
typename TCheck =
CHK,
664 if constexpr ( TCheck::value ) {
667 cmpSub.
buffer+= rhsRegionStart;
668 cmpSub.
length= rhsRegionLength;
671 return TString(
buffer + regionStart, regionLength ).CompareTo<
CHK, TSensitivity>( cmpSub );
697 template<
typename TCheck =
CHK,
702 if constexpr ( TCheck::value ) {
703 if ( pos < 0 || pos + needleLength >
length || needle.
IsNull () )
705 if ( needleLength == 0 )
709 "STRINGS",
"Non checking and index out of range: 0 <= {}, {} <= {}.",
710 pos, pos + needleLength,
length )
712 "STRINGS",
"Non checking and emtpy compare string" )
733 template<
typename TCheck =
CHK,
736 if constexpr ( TCheck::value ) {
743 "Non checking and needle longer than this string: {} > {}",
746 "Non checking and emtpy needle given." )
762 template<
typename TCheck =
CHK,
765 if constexpr ( TCheck::value ) {
772 "Non checking and needle longer than this string: {} > {}",
775 "Non checking and emtpy needle given." )
798 template <
typename TCheck= CHK>
802 if constexpr ( TCheck::value ) {
804 if ( startIdx < 0 ) startIdx= 0;
805 else if ( startIdx >=
length )
return -1;
808 "Non checking and index out of range: 0 <= {} < {}.", startIdx,
length )
813 return result !=
nullptr ? result -
buffer
826 template <
typename TCheck= CHK>
830 if constexpr ( TCheck::value ) {
839 && rs == regionStart && rl == regionLength,
"STRINGS",
840 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
841 regionStart, regionLength, rs, rl )
847 return result !=
nullptr ? result -
buffer
863 return result !=
nullptr ? result -
buffer
878 template <
typename TCheck= CHK>
881 if constexpr ( TCheck::value ) {
883 if ( startIdx < 0 ) startIdx= 0;
887 "Non checking and index out of range: 0 <= {} < {}.", startIdx,
length )
891 return result !=
nullptr ? result -
buffer
908 template <
typename TCheck= CHK>
912 if constexpr ( TCheck::value ) {
914 if ( startIndex < 0 )
return -1;
918 "Non checking and index out of range: 0 <= {} < {}.", startIndex,
length )
921 while( startIndex >= 0 &&
buffer[ startIndex ] != needle )
956 typename TCheck =
CHK>
958 if constexpr ( TCheck::value ) {
959 if ( startIdx < 0 ) startIdx= 0;
960 if ( startIdx >=
length )
return -1;
963 "STRINGS",
"Non checking and illegal parameters: 0 <= {} < {}. Needles: {}",
972 return idx == -1 ? -1 : startIdx + idx;
996 typename TCheck =
CHK>
998 if constexpr ( TCheck::value ) {
999 if ( startIdx < 0 )
return -1;
1003 "STRINGS",
"Non checking and illegal parameters: 0 <= {} < {}. Needles: {}",
1033 template<
typename TCheck =
CHK,
1038 if constexpr ( TCheck::value ) {
1041 if ( startIdx < 0 ) startIdx= 0;
1042 endIdx= (std::min) (endIdx,
length - needle.
Length() + 1 );
1043 if ( startIdx >= endIdx )
return -1;
1052 "STRINGS",
"Non checking and illegal parameters: 0 <= {} <= {}, {} <= {}. Needles: {}",
1075 template <
typename TCheck= CHK>
1078 integer startIdx = 0 )
const {
1081 if constexpr ( TCheck::value ) {
1083 if ( startIdx < 0 ) startIdx= 0;
1084 else if ( startIdx >=
length )
return startIdx;
1087 "Non checking and index out of range: 0 <= {} < {}.", startIdx,
length )
1128 template <
typename TCheck= CHK>
1130 integer startPos = 0 )
const {
1132 if constexpr ( TCheck::value ) {
1134 if ( startPos < 0 ) startPos= 0;
1135 else if ( startPos >=
length )
return 0;
1138 "Non checking and index out of range: 0 <= {} < {}.", startPos,
length )
1143 while( startPos <
length && (startPos=
IndexOf<NC>( needle, startPos )) >= 0 ) {
1164 template <
typename TCheck= CHK>
1169 if constexpr ( TCheck::value ) {
1171 if ( startPos < 0 ) startPos= 0;
1172 else if ( startPos >=
length )
return 0;
1175 "Non checking and index out of range: 0 <= {} < {}.", startPos,
length )
1179 while( startPos <
length && (startPos=
IndexOf<NC>( needle, startPos )) >= 0 ) {
1181 if( startPos <
Length() && *(
buffer + startPos) == omit )
1204 template<
typename TCheck =
CHK,
1207 integer startPos = 0 )
const {
1212 if constexpr ( TCheck::value ) {
1213 if ( startPos < 0 ) startPos= 0;
1214 if ( startPos + nLen >
length )
return 0;
1217 "Non checking and index out of range: 0 <= {} < {}.", startPos,
length )
1222 startPos+= needle.
Length();
1246 template<
typename TCheck =
CHK,
1250 integer startPos = 0 )
const {
1255 if constexpr ( TCheck::value ) {
1256 if ( startPos < 0 ) startPos= 0;
1257 if ( startPos + nLen >
length )
return 0;
1260 "Non checking and index out of range: 0 <= {} < {}.", startPos,
length )
1325 integer* newIdx=
nullptr )
const;
1337 {
return ParseInt( 0, numberFormat, newIdx ); }
1361 {
return ParseInt( startIdx,
nullptr, newIdx ); }
1392 integer* newIdx=
nullptr )
const;
1405 {
return ParseDec( 0, numberFormat, newIdx ); }
1431 {
return ParseDec( startIdx,
nullptr, newIdx ); }
1458 integer* newIdx=
nullptr )
const;
1472 {
return ParseBin( 0, numberFormat, newIdx ); }
1498 {
return ParseBin( startIdx,
nullptr, newIdx ); }
1525 integer* newIdx=
nullptr )
const;
1539 {
return ParseHex( 0, numberFormat, newIdx ); }
1565 {
return ParseHex( startIdx,
nullptr, newIdx ); }
1592 integer* newIdx=
nullptr )
const;
1606 {
return ParseOct( 0, numberFormat, newIdx ); }
1632 {
return ParseOct( startIdx,
nullptr, newIdx ); }
1659 integer* newIdx=
nullptr )
const;
1672 {
return ParseFloat( 0, numberFormat, newIdx ); }
1698 {
return ParseFloat( startIdx,
nullptr, newIdx ); }
1727 template<
typename TAllocator>
1735 auto* newBuf= allocator().template AllocArray<TChar>( copy.
length );
1754 template<
typename TAllocator>
1756 void Free( TAllocator& allocator ) {
1777 if (regionStart >=
length) {
1784 if (regionStart < 0 ) {
1785 regionLength+= regionStart;
1790 if ( regionLength < 0 ) {
1796 if ( regionLength > maxRegionLength )
1797 regionLength= maxRegionLength;
1800 return regionLength == 0;
1812 template<
typename TCharConstOrMutable>
1823 TCharConstOrMutable*
p;
2004 template<lang::Case TSensitivity =lang::Case::Sensitive>
2019template<
typename TChar>
2020struct ArrayTraits<
strings::TString<TChar>, TChar> {
2024 static constexpr const TChar*
Buffer (
const T& src) {
return src.
Buffer(); }
2025 static constexpr integer Length (
const T& src) {
return src.Length(); }
2026 static constexpr T
Construct(
const TChar* b,
integer l) {
return T(b, l); }
2029template<
typename TChar>
2031 using T= strings::TString<TChar>;
2034 static constexpr const TChar*
Buffer(
const T& src) {
return src.Buffer(); }
2035 static constexpr integer Length(
const T& src) {
return src.Length(); }
2036 static constexpr T
Construct(
const TChar* b,
integer l ) {
return T(b, l); }
2076template<
typename TChar>
2077bool operator== (
const TString<TChar>& lhs,
const TString<TChar>& rhs)
2078{
return lhs.
template Equals <CHK, lang::Case::Sensitive>(rhs); }
2081template<
typename TChar,
typename T>
2082requires (!std::is_same_v<T, TString<TChar>>)
2083bool operator== (
const TString<TChar>& lhs,
const T& rhs)
2084{
return lhs.
template Equals <CHK, lang::Case::Sensitive>(rhs); }
2087template<
typename TChar>
2089{
return lhs.
template CompareTo<CHK, lang::Case::Sensitive>(rhs); }
2092template<
typename TChar,
typename T>
2093requires (!std::same_as<TString<TChar>, T>)
2095{
return lhs.
template CompareTo<CHK, lang::Case::Sensitive>(rhs); }
2107extern template ALIB_DLL integer TString<nchar>::indexOfString<lang::Case::Sensitive>(
const TString<nchar >&, integer, integer )
const;
2108extern template ALIB_DLL integer TString<nchar>::indexOfString<lang::Case::Ignore >(
const TString<nchar >&, integer, integer )
const;
2109extern template ALIB_DLL integer TString<nchar>::IndexOfSegmentEnd ( nchar, nchar, integer )
const;
2110extern template ALIB_DLL uint64_t TString<nchar>::ParseDecDigits ( integer, integer* )
const;
2111extern template ALIB_DLL int64_t TString<nchar>::ParseInt ( integer, TNumberFormat<nchar>*, integer* )
const;
2112extern template ALIB_DLL uint64_t TString<nchar>::ParseDec ( integer, TNumberFormat<nchar>*, integer* )
const;
2113extern template ALIB_DLL uint64_t TString<nchar>::ParseBin ( integer, TNumberFormat<nchar>*, integer* )
const;
2114extern template ALIB_DLL uint64_t TString<nchar>::ParseHex ( integer, TNumberFormat<nchar>*, integer* )
const;
2115extern template ALIB_DLL uint64_t TString<nchar>::ParseOct ( integer, TNumberFormat<nchar>*, integer* )
const;
2116extern template ALIB_DLL double TString<nchar>::ParseFloat ( integer, TNumberFormat<nchar>*, integer* )
const;
2117extern template ALIB_DLL size_t TString<nchar>::Hashcode ()
const;
2118extern template ALIB_DLL size_t TString<nchar>::HashcodeIgnoreCase ()
const;
2120template<>
inline integer TString<wchar>::WStringLength ()
const {
return length; }
2121extern template ALIB_DLL integer TString<wchar>::indexOfString<lang::Case::Sensitive>(
const TString<wchar>&, integer, integer )
const;
2122extern template ALIB_DLL integer TString<wchar>::indexOfString<lang::Case::Ignore >(
const TString<wchar>&, integer, integer )
const;
2123extern template ALIB_DLL integer TString<wchar>::IndexOfSegmentEnd (wchar, wchar, integer )
const;
2124extern template ALIB_DLL uint64_t TString<wchar>::ParseDecDigits ( integer, integer* )
const;
2125extern template ALIB_DLL int64_t TString<wchar>::ParseInt ( integer, TNumberFormat<wchar>*, integer* )
const;
2126extern template ALIB_DLL uint64_t TString<wchar>::ParseDec ( integer, TNumberFormat<wchar>*, integer* )
const;
2127extern template ALIB_DLL uint64_t TString<wchar>::ParseBin ( integer, TNumberFormat<wchar>*, integer* )
const;
2128extern template ALIB_DLL uint64_t TString<wchar>::ParseHex ( integer, TNumberFormat<wchar>*, integer* )
const;
2129extern template ALIB_DLL uint64_t TString<wchar>::ParseOct ( integer, TNumberFormat<wchar>*, integer* )
const;
2130extern template ALIB_DLL double TString<wchar>::ParseFloat ( integer, TNumberFormat<wchar>*, integer* )
const;
2131extern template ALIB_DLL size_t TString<wchar>::Hashcode ()
const;
2132extern template ALIB_DLL size_t TString<wchar>::HashcodeIgnoreCase ()
const;
2135extern template ALIB_DLL integer TString<xchar>::indexOfString<lang::Case::Sensitive>(
const TString<xchar >&, integer, integer )
const;
2136extern template ALIB_DLL integer TString<xchar>::indexOfString<lang::Case::Ignore >(
const TString<xchar >&, integer, integer )
const;
2137extern template ALIB_DLL integer TString<xchar>::IndexOfSegmentEnd ( xchar, xchar, integer )
const;
2138extern template ALIB_DLL uint64_t TString<xchar>::ParseDecDigits ( integer, integer* )
const;
2139extern template ALIB_DLL int64_t TString<xchar>::ParseInt ( integer, TNumberFormat<xchar>*, integer* )
const;
2140extern template ALIB_DLL uint64_t TString<xchar>::ParseDec ( integer, TNumberFormat<xchar>*, integer* )
const;
2141extern template ALIB_DLL uint64_t TString<xchar>::ParseBin ( integer, TNumberFormat<xchar>*, integer* )
const;
2142extern template ALIB_DLL uint64_t TString<xchar>::ParseHex ( integer, TNumberFormat<xchar>*, integer* )
const;
2143extern template ALIB_DLL uint64_t TString<xchar>::ParseOct ( integer, TNumberFormat<xchar>*, integer* )
const;
2144extern template ALIB_DLL double TString<xchar>::ParseFloat ( integer, TNumberFormat<xchar>*, integer* )
const;
2145extern template ALIB_DLL size_t TString<xchar>::Hashcode ()
const;
2146extern template ALIB_DLL size_t TString<xchar>::HashcodeIgnoreCase ()
const;
2151#if ALIB_DEBUG_STRINGS
2152 extern template ALIB_DLL void TString<nchar>::dbgCheck()
const;
2153 extern template ALIB_DLL void TString<wchar>::dbgCheck()
const;
2154 extern template ALIB_DLL void TString<xchar>::dbgCheck()
const;
2217template<>
struct StringConstantsTraits<nchar> {
constexpr static NString EmptyString() {
return "" ; } };
2218template<>
struct StringConstantsTraits<wchar> {
constexpr static WString EmptyString() {
return A_WCHAR(
""); } };
2219template<>
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()