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>
93 #if ALIB_DEBUG_STRINGS && !DOXYGEN
94 void dbgCheck()
const;
189 template <
typename T>
209 constexpr explicit TString(
const T& src) noexcept
243 template<
typename TAllocator>
252 auto* newBuf= allocator().template AllocArray<TChar>( copy.
length);
273 template<
typename T>
277 std::remove_cv_t<T> >::value )
279 constexpr operator T()
const
295 template<
typename T>
299 std::remove_cv_t<T> >::value )
300 constexpr explicit operator T()
const
385 template <
typename TCheck= CHK>
390 if constexpr ( TCheck::value )
401 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
402 regionStart, regionLength, rs, rl )
420 template <
typename TCheck= CHK>
423 if constexpr ( TCheck::value )
427 "Non checking version: Index out of range: 0 <= {} < {}.", idx,
length )
439 template <
typename TCheck= CHK>
442 if constexpr ( TCheck::value )
459 template <
typename TCheck= CHK>
462 if constexpr ( TCheck::value )
496 "Index out of bounds: 0 <= {} < {}.", idx,
length )
539 template <
typename TCheck =
CHK,
545 if constexpr ( TCheck::value )
594 template <
typename TCheck =
CHK,
601 if (TCheck::value &&
IsNull() )
return rhs.
IsNull() ? 0 : -1;
602 if (TCheck::value && rhs.
IsNull() )
return +1;
605 if ( TCheck::value &&
length == 0 )
return rhs.
length == 0 ? 0 : -1;
606 if ( rhs.
length == 0 )
return +1;
617 return thisIsShorter ? -1 : 1;
642 template <
typename TCheck =
CHK,
648 if constexpr ( TCheck::value )
652 cmpSub.
buffer+= rhsRegionStart;
653 cmpSub.
length= rhsRegionLength;
688 template <
typename TCheck =
CHK,
696 if constexpr ( TCheck::value )
700 cmpSub.
buffer+= rhsRegionStart;
701 cmpSub.
length= rhsRegionLength;
704 return TString(
buffer + regionStart, regionLength ).CompareTo<
CHK, TSensitivity>( cmpSub );
730 template<
typename TCheck =
CHK,
736 if constexpr ( TCheck::value )
738 if ( pos < 0 || pos + needleLength >
length || needle.
IsNull () )
740 if ( needleLength == 0 )
746 "STRINGS",
"Non checking and index out of range: 0 <= {}, {} <= {}.",
747 pos, pos + needleLength,
length )
749 "STRINGS",
"Non checking and emtpy compare string" )
770 template<
typename TCheck =
CHK,
774 if constexpr ( TCheck::value )
784 "Non checking and needle longer than this string: {} > {}",
787 "Non checking and emtpy needle given." )
803 template<
typename TCheck =
CHK,
807 if constexpr ( TCheck::value )
817 "Non checking and needle longer than this string: {} > {}",
820 "Non checking and emtpy needle given." )
843 template <
typename TCheck= CHK>
848 if constexpr ( TCheck::value )
851 if ( startIdx < 0 ) startIdx= 0;
852 else if ( startIdx >=
length )
return -1;
857 "Non checking and index out of range: 0 <= {} < {}.", startIdx,
length )
862 return result !=
nullptr ? result -
buffer
875 template <
typename TCheck= CHK>
880 if constexpr ( TCheck::value )
892 && rs == regionStart && rl == regionLength,
"STRINGS",
893 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
894 regionStart, regionLength, rs, rl )
900 return result !=
nullptr ? result -
buffer
917 return result !=
nullptr ? result -
buffer
932 template <
typename TCheck= CHK>
936 if constexpr ( TCheck::value )
939 if ( startIdx < 0 ) startIdx= 0;
945 "Non checking and index out of range: 0 <= {} < {}.", startIdx,
length )
949 return result !=
nullptr ? result -
buffer
966 template <
typename TCheck= CHK>
971 if constexpr ( TCheck::value )
974 if ( startIndex < 0 )
return -1;
980 "Non checking and index out of range: 0 <= {} < {}.", startIndex,
length )
983 while( startIndex >= 0 &&
buffer[ startIndex ] != needle )
1018 typename TCheck =
CHK>
1021 if constexpr ( TCheck::value )
1023 if ( startIdx < 0 ) startIdx= 0;
1024 if ( startIdx >=
length )
return -1;
1029 "STRINGS",
"Non checking and illegal parameters: 0 <= {} < {}. Needles: {}",
1038 return idx == -1 ? -1 : startIdx + idx;
1062 typename TCheck =
CHK>
1065 if constexpr ( TCheck::value )
1067 if ( startIdx < 0 )
return -1;
1073 "STRINGS",
"Non checking and illegal parameters: 0 <= {} < {}. Needles: {}",
1102 template<
typename TCheck =
CHK,
1108 if constexpr ( TCheck::value )
1112 if ( startIdx < 0 ) startIdx= 0;
1113 endIdx= (std::min) (endIdx,
length - needle.
Length() + 1 );
1114 if ( startIdx >= endIdx )
return -1;
1125 "STRINGS",
"Non checking and illegal parameters: 0 <= {} <= {}, {} <= {}. Needles: {}",
1148 template <
typename TCheck= CHK>
1155 if constexpr ( TCheck::value )
1158 if ( startIdx < 0 ) startIdx= 0;
1159 else if ( startIdx >=
length )
return startIdx;
1164 "Non checking and index out of range: 0 <= {} < {}.", startIdx,
length )
1205 template <
typename TCheck= CHK>
1210 if constexpr ( TCheck::value )
1213 if ( startPos < 0 ) startPos= 0;
1214 else if ( startPos >=
length )
return 0;
1219 "Non checking and index out of range: 0 <= {} < {}.", startPos,
length )
1246 template <
typename TCheck= CHK>
1252 if constexpr ( TCheck::value )
1255 if ( startPos < 0 ) startPos= 0;
1256 else if ( startPos >=
length )
return 0;
1261 "Non checking and index out of range: 0 <= {} < {}.", startPos,
length )
1268 if( startPos <
Length() && *(
buffer + startPos) == omit )
1291 template<
typename TCheck =
CHK,
1300 if constexpr ( TCheck::value )
1302 if ( startPos < 0 ) startPos= 0;
1303 if ( startPos + nLen >
length )
return 0;
1308 "Non checking and index out of range: 0 <= {} < {}.", startPos,
length )
1314 startPos+= needle.
Length();
1338 template<
typename TCheck =
CHK,
1348 if constexpr ( TCheck::value )
1350 if ( startPos < 0 ) startPos= 0;
1351 if ( startPos + nLen >
length )
return 0;
1356 "Non checking and index out of range: 0 <= {} < {}.", startPos,
length )
1421 integer* newIdx=
nullptr )
const;
1435 return ParseInt( 0, numberFormat, newIdx );
1449 return ParseInt( 0,
nullptr, newIdx );
1466 return ParseInt( startIdx,
nullptr, newIdx );
1498 integer* newIdx=
nullptr )
const;
1512 return ParseDec( 0, numberFormat, newIdx );
1526 return ParseDec( 0,
nullptr, newIdx );
1543 return ParseDec( startIdx,
nullptr, newIdx );
1571 integer* newIdx=
nullptr )
const;
1586 return ParseBin( 0, numberFormat, newIdx );
1600 return ParseBin( 0,
nullptr, newIdx );
1617 return ParseBin( startIdx,
nullptr, newIdx );
1645 integer* newIdx=
nullptr )
const;
1660 return ParseHex( 0, numberFormat, newIdx );
1674 return ParseHex( 0,
nullptr, newIdx );
1691 return ParseHex( startIdx,
nullptr, newIdx );
1719 integer* newIdx=
nullptr )
const;
1734 return ParseOct( 0, numberFormat, newIdx );
1748 return ParseOct( 0,
nullptr, newIdx );
1765 return ParseOct( startIdx,
nullptr, newIdx );
1793 integer* newIdx=
nullptr )
const;
1807 return ParseFloat( 0, numberFormat, newIdx );
1838 return ParseFloat( startIdx,
nullptr, newIdx );
1868 template<
typename TAllocator>
1878 auto* newBuf= allocator().template AllocArray<TChar>( copy.
length );
1897 template<
typename TAllocator>
1922 if (regionStart >=
length)
1930 if (regionStart < 0 )
1932 regionLength+= regionStart;
1937 if ( regionLength < 0 )
1944 if ( regionLength > maxRegionLength )
1945 regionLength= maxRegionLength;
1948 return regionLength == 0;
1964 template<
typename TCharConstOrMutable>
1976 TCharConstOrMutable*
p;
2006 return p == other.
p;
2014 return !(*
this == other);
2121 return p <= other.
p;
2139 return p >= other.
p;
2220 template<lang::Case TSensitivity =lang::Case::Sensitive>
2235template<
typename TChar>
struct ArrayTraits<
strings::TString<TChar>, TChar>
2240 static constexpr const TChar*
Buffer (
const T& src) {
return src.
Buffer(); }
2241 static constexpr integer Length (
const T& src) {
return src.Length(); }
2242 static constexpr T
Construct(
const TChar* b,
integer l) {
return T(b, l); }
2245template<
typename TChar>
struct ZTArrayTraits<strings::TString<TChar>, TChar>
2247 using T= strings::TString<TChar>;
2250 static constexpr const TChar*
Buffer(
const T& src) {
return src.Buffer(); }
2251 static constexpr integer Length(
const T& src) {
return src.Length(); }
2252 static constexpr T
Construct(
const TChar* b,
integer l ) {
return T(b, l); }
2293template<
typename TChar>
2294bool operator== (
const TString<TChar>& lhs,
const TString<TChar>& rhs)
2295{
return lhs.
template Equals <CHK, lang::Case::Sensitive>(rhs); }
2298template<
typename TChar,
typename T>
2299requires (!std::is_same_v<T, TString<TChar>>)
2301{
return lhs.
template Equals <CHK, lang::Case::Sensitive>(rhs); }
2304template<
typename TChar>
2306{
return lhs.
template CompareTo<CHK, lang::Case::Sensitive>(rhs); }
2309template<
typename TChar,
typename T>
2310requires (!std::same_as<TString<TChar>, T>)
2312{
return lhs.
template CompareTo<CHK, lang::Case::Sensitive>(rhs); }
2324extern template ALIB_DLL integer TString<nchar>::indexOfString<lang::Case::Sensitive>(
const TString<nchar >&, integer, integer )
const;
2325extern template ALIB_DLL integer TString<nchar>::indexOfString<lang::Case::Ignore >(
const TString<nchar >&, integer, integer )
const;
2326extern template ALIB_DLL integer TString<nchar>::IndexOfSegmentEnd ( nchar, nchar, integer )
const;
2327extern template ALIB_DLL uint64_t TString<nchar>::ParseDecDigits ( integer, integer* )
const;
2328extern template ALIB_DLL int64_t TString<nchar>::ParseInt ( integer, TNumberFormat<nchar>*, integer* )
const;
2329extern template ALIB_DLL uint64_t TString<nchar>::ParseDec ( integer, TNumberFormat<nchar>*, integer* )
const;
2330extern template ALIB_DLL uint64_t TString<nchar>::ParseBin ( integer, TNumberFormat<nchar>*, integer* )
const;
2331extern template ALIB_DLL uint64_t TString<nchar>::ParseHex ( integer, TNumberFormat<nchar>*, integer* )
const;
2332extern template ALIB_DLL uint64_t TString<nchar>::ParseOct ( integer, TNumberFormat<nchar>*, integer* )
const;
2333extern template ALIB_DLL double TString<nchar>::ParseFloat ( integer, TNumberFormat<nchar>*, integer* )
const;
2334extern template ALIB_DLL size_t TString<nchar>::Hashcode ()
const;
2335extern template ALIB_DLL size_t TString<nchar>::HashcodeIgnoreCase ()
const;
2337template<>
inline integer TString<wchar>::WStringLength ()
const {
return length; }
2338extern template ALIB_DLL integer TString<wchar>::indexOfString<lang::Case::Sensitive>(
const TString<wchar>&, integer, integer )
const;
2339extern template ALIB_DLL integer TString<wchar>::indexOfString<lang::Case::Ignore >(
const TString<wchar>&, integer, integer )
const;
2340extern template ALIB_DLL integer TString<wchar>::IndexOfSegmentEnd (wchar, wchar, integer )
const;
2341extern template ALIB_DLL uint64_t TString<wchar>::ParseDecDigits ( integer, integer* )
const;
2342extern template ALIB_DLL int64_t TString<wchar>::ParseInt ( integer, TNumberFormat<wchar>*, integer* )
const;
2343extern template ALIB_DLL uint64_t TString<wchar>::ParseDec ( integer, TNumberFormat<wchar>*, integer* )
const;
2344extern template ALIB_DLL uint64_t TString<wchar>::ParseBin ( integer, TNumberFormat<wchar>*, integer* )
const;
2345extern template ALIB_DLL uint64_t TString<wchar>::ParseHex ( integer, TNumberFormat<wchar>*, integer* )
const;
2346extern template ALIB_DLL uint64_t TString<wchar>::ParseOct ( integer, TNumberFormat<wchar>*, integer* )
const;
2347extern template ALIB_DLL double TString<wchar>::ParseFloat ( integer, TNumberFormat<wchar>*, integer* )
const;
2348extern template ALIB_DLL size_t TString<wchar>::Hashcode ()
const;
2349extern template ALIB_DLL size_t TString<wchar>::HashcodeIgnoreCase ()
const;
2352extern template ALIB_DLL integer TString<xchar>::indexOfString<lang::Case::Sensitive>(
const TString<xchar >&, integer, integer )
const;
2353extern template ALIB_DLL integer TString<xchar>::indexOfString<lang::Case::Ignore >(
const TString<xchar >&, integer, integer )
const;
2354extern template ALIB_DLL integer TString<xchar>::IndexOfSegmentEnd ( xchar, xchar, integer )
const;
2355extern template ALIB_DLL uint64_t TString<xchar>::ParseDecDigits ( integer, integer* )
const;
2356extern template ALIB_DLL int64_t TString<xchar>::ParseInt ( integer, TNumberFormat<xchar>*, integer* )
const;
2357extern template ALIB_DLL uint64_t TString<xchar>::ParseDec ( integer, TNumberFormat<xchar>*, integer* )
const;
2358extern template ALIB_DLL uint64_t TString<xchar>::ParseBin ( integer, TNumberFormat<xchar>*, integer* )
const;
2359extern template ALIB_DLL uint64_t TString<xchar>::ParseHex ( integer, TNumberFormat<xchar>*, integer* )
const;
2360extern template ALIB_DLL uint64_t TString<xchar>::ParseOct ( integer, TNumberFormat<xchar>*, integer* )
const;
2361extern template ALIB_DLL double TString<xchar>::ParseFloat ( integer, TNumberFormat<xchar>*, integer* )
const;
2362extern template ALIB_DLL size_t TString<xchar>::Hashcode ()
const;
2363extern template ALIB_DLL size_t TString<xchar>::HashcodeIgnoreCase ()
const;
2368#if ALIB_DEBUG_STRINGS
2369 extern template ALIB_DLL void TString<nchar>::dbgCheck()
const;
2370 extern template ALIB_DLL void TString<wchar>::dbgCheck()
const;
2371 extern template ALIB_DLL void TString<xchar>::dbgCheck()
const;
2433template<>
struct StringConstantsTraits<nchar> {
constexpr static NString EmptyString() {
return "" ; } };
2434template<>
struct StringConstantsTraits<wchar> {
constexpr static WString EmptyString() {
return A_WCHAR(
""); } };
2435template<>
struct StringConstantsTraits<xchar> {
constexpr static XString EmptyString() {
return A_XCHAR(
""); } };
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
TString(TAllocator &allocator, const TString< TChar > ©)
double ParseFloat(integer startIdx, integer *newIdx) 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
ALIB_DLL uint64_t ParseDec(integer startIdx=0, TNumberFormat< TChar > *numberFormat=nullptr, integer *newIdx=nullptr) const
integer IndexOfOrLength(TChar needle, integer startIdx) const
constexpr integer Length() const
ALIB_DLL double ParseFloat(integer startIdx=0, TNumberFormat< TChar > *numberFormat=nullptr, integer *newIdx=nullptr) const
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
ALIB_DLL int64_t ParseInt(integer startIdx=0, TNumberFormat< TChar > *numberFormat=nullptr, integer *newIdx=nullptr) const
constexpr TString(const T &src) noexcept
const_reverse_iterator rbegin() const
uint64_t ParseHex(integer *newIdx) const
uint64_t ParseOct(integer startIdx, integer *newIdx) const
std::size_t HashcodeIgnoreCase() const
integer IndexOfFirstDifference(const TString &needle, lang::Case sensitivity=lang::Case::Sensitive, integer startIdx=0) const
uint64_t ParseDec(TNumberFormat< TChar > *numberFormat, integer *newIdx=nullptr) const
uint64_t ParseHex(TNumberFormat< TChar > *numberFormat, integer *newIdx=nullptr) const
TRandomAccessIterator< const CharacterType > const_iterator
ALIB_DLL integer indexOfString(const TString &needle, integer startIdx, integer endIdx) const
integer CountChar(TChar needle, TChar omit, integer startPos) const
std::size_t Hashcode() const
constexpr TString(T &src) noexcept
TChar CharAt(integer idx) const
const_reverse_iterator crend() const
constexpr bool IsNotEmpty() const
const_iterator end() const
bool AdjustRegion(integer ®ionStart, integer ®ionLength) const
ALIB_DLL uint64_t ParseHex(integer startIdx=0, TNumberFormat< TChar > *numberFormat=nullptr, integer *newIdx=nullptr) const
bool ContainsAt(const TString &needle, integer pos) const
integer IndexOfAny(const TString &needles, integer startIdx=0) const
constexpr const CharacterType * Buffer() const
const_iterator begin() const
ALIB_DLL uint64_t ParseBin(integer startIdx=0, TNumberFormat< TChar > *numberFormat=nullptr, integer *newIdx=nullptr) 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
integer WStringLength() const
integer LastIndexOf(TChar needle, integer startIndex=MAX_LEN) const
uint64_t ParseBin(integer startIdx, integer *newIdx) const
uint64_t ParseOct(integer *newIdx) const
void Free(TAllocator &allocator)
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
void Allocate(TAllocator &allocator, const TString< TChar > ©)
int CompareTo(const TString &rhs, integer rhsRegionStart, integer rhsRegionLength, integer regionStart, integer regionLength=MAX_LEN) const
ALIB_DLL uint64_t ParseDecDigits(integer startIdx=0, integer *newIdx=nullptr) const
TString< TChar > Substring(integer regionStart, integer regionLength=MAX_LEN) 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
ALIB_DLL uint64_t ParseOct(integer startIdx=0, TNumberFormat< TChar > *numberFormat=nullptr, integer *newIdx=nullptr) const
bool Equals(const TString< TChar > &rhs) const
constexpr bool IsNull() const
constexpr TString(const T &src) noexcept
bool StartsWith(const TString &needle) const
integer IndexOfOrLength(TChar needle) const
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
#define ALIB_WARNINGS_RESTORE
#define ALIB_WARNINGS_IGNORE_DOCS
#define ALIB_WARNINGS_ALLOW_NULL_POINTER_PASSING
#define ALIB_ASSERT_ERROR(cond, domain,...)
#define ALIB_STRING_DBG_CHK(instance)
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)
platform_specific integer
Case
Denotes upper and lower case character treatment.
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)
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< complementChar > ComplementString
Type alias in namespace alib.
constexpr ComplementString EMPTY_COMPLEMENT_STRING
An empty string of the complement character type.
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.
strings::TString< xchar > XString
Type alias in namespace alib.
lang::integer integer
Type alias in namespace alib.
strings::TString< nchar > NString
Type alias in namespace alib.
constexpr WString NULL_WSTRING
A nulled string of the wide character type.
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< wchar > WString
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< character > String
Type alias in namespace alib.
strings::TString< strangeChar > StrangeString
Type alias in namespace alib.
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()