48template<
typename TAppendable,
72template<
typename T,
typename TChar,
typename TAllocator>
170template<
typename TChar,
typename TAllocator= lang::HeapAllocator>
192 #if ALIB_DEBUG_STRINGS
260 :
base ( extBuffer, 0 )
284 :
base( extBuffer, 0 )
334 if ( !move.HasInternalBuffer() ) {
355 #if ALIB_DEBUG_STRINGS
357 move.buffer=
nullptr;
368 template <
typename TAppendable>
382 ,
size_t(
capacity + 1) *
sizeof(TChar)
404 template<
typename T>
405 constexpr operator T()
const;
407 template<
typename T>
411 std::remove_cv_t<T> >::value)
412 constexpr operator T()
const
416 template<
typename T>
417 requires ( alib::characters::IsExplicitArrayCast <T, TChar>
421 std::remove_cv_t<T> >::value )
422 constexpr explicit operator T()
const
425 template<
typename T>
426 requires ( !alib::characters::IsImplicitArrayCast <T, TChar>
430 std::remove_cv_t<T> >::value )
431 constexpr operator T()
const {
436 template<
typename T>
437 requires ( !alib::characters::IsExplicitArrayCast <T, TChar>
441 std::remove_cv_t<T> >::value )
442 constexpr explicit operator T()
const {
556 #if ALIB_DEBUG_STRINGS
558 "STRINGS",
"Previous allocation request was too short: {} >= {}",
565 #if ALIB_DEBUG_STRINGS
631 TChar*
VBuffer()
const {
return base::vbuffer; }
648 template<
typename TCheck =CHK>
651 "STRINGS",
"Can't write character '\0'" )
652 if constexpr ( TCheck::value ) {
655 *(base::vbuffer + idx )= c;
658 "Non-checking invocation: ",
"Index out of range: 0 <= {} < {}", idx,
base::length )
659 *(base::vbuffer + idx )= c;
675 return base::vbuffer[idx];
678 using base::operator[];
695 "STRINGS",
"Negative AString length {} requested", newLength )
697 "STRINGS",
"Requested AString length {} exceeds capacity {}",
717 "STRINGS",
"Detected AString length {} exceeds capacity {}",
743 "STRINGS",
"Negative AString length {} requested", newLength )
745 "STRINGS",
"Increase from {} to {} of AString length requested",
747 #if ALIB_DEBUG_STRINGS
779 template <
typename TCheck= CHK,
typename TCharSrc >
781 && !std::same_as<TCharSrc,TChar> )
784 if constexpr ( std::same_as<TCheck, alib::CHK> ) {
785 if( !src )
return *
this;
786 if ( srcLength <= 0 ) {
794 #if ALIB_CHARACTERS_NATIVE_WCHAR
795 # define REAL_WCHAR wchar
796 # define REAL_XCHAR xchar
798 # define REAL_WCHAR xchar
799 # define REAL_XCHAR wchar
804 if constexpr ( std::same_as<TChar, nchar> ) {
807 if constexpr ( std::same_as<TCharSrc, REAL_WCHAR> ) {
809 #if defined( _WIN32 )
812 for(
integer bufSizeFactor= 2; bufSizeFactor < 8; ++bufSizeFactor) {
814 int conversionSize= WideCharToMultiByte( CP_UTF8, 0,
815 src,
int( srcLength),
818 if ( conversionSize > 0 ) {
824 int error= GetLastError();
825 if (error == ERROR_INSUFFICIENT_BUFFER ) {
832 "AString: Cannot convert wide character string to UTF-8. Error: {} ({})",
833 ( error == ERROR_INVALID_FLAGS ?
"ERROR_INVALID_FLAGS."
834 : error == ERROR_INVALID_PARAMETER ?
"ERROR_INVALID_PARAMETER"
835 : error == ERROR_NO_UNICODE_TRANSLATION ?
"ERROR_NO_UNICODE_TRANSLATION"
841 ALIB_ERROR(
"STRINGS",
"AString: Cannot convert wide character string to "
842 "UTF-8. Error: ERROR_INSUFFICIENT_BUFFER" )
846 #elif defined (__GLIBCXX__) || defined(_LIBCPP_VERSION) || defined(__APPLE__) || defined(__ANDROID_NDK__)
852 memset( &ps, 0,
sizeof(mbstate_t) );
853 const REAL_WCHAR* srcp= src;
854 size_t conversionSize= wcsnrtombs( base::vbuffer +
base::length, &srcp,
size_t(srcLength),
size_t(maxConversionSize), &ps);
855 if ( conversionSize ==
size_t( -1 ) ) {
857 "Check locale settings (should be UTF-8)" )
861 if ( conversionSize < 1 ) {
862 ALIB_ERROR(
"STRINGS",
"Error converting WCS to MBCS." )
870 #pragma message ("Unknown Platform in file: " __FILE__ )
876 if constexpr ( std::same_as<TCharSrc, REAL_XCHAR> ) {
879 REAL_WCHAR externalBuffer[2048];
880 converter.
SetBuffer( externalBuffer, 2048 );
882 converter.
Append<
NC>( src, srcLength );
889 else if constexpr ( std::same_as<TChar, wchar_t> ) {
891 if constexpr ( std::same_as<TCharSrc, nchar> ) {
894 #if defined( _WIN32 )
897 integer conversionSize= MultiByteToWideChar( CP_UTF8, 9,
898 src,
int( srcLength ),
903 if ( conversionSize == 0 ) {
905 int error= GetLastError();
908 "MBCS to WCS conversion failed. Error: {} ({})",
909 ( error == ERROR_INSUFFICIENT_BUFFER ?
"ERROR_INSUFFICIENT_BUFFER."
910 : error == ERROR_INVALID_FLAGS ?
"ERROR_INVALID_FLAGS."
911 : error == ERROR_INVALID_PARAMETER ?
"ERROR_INVALID_PARAMETER"
912 : error == ERROR_NO_UNICODE_TRANSLATION ?
"ERROR_NO_UNICODE_TRANSLATION"
919 "MBCS to WCS conversion failed. Requested length={}, conversion length=",
920 srcLength, conversionSize )
928 #elif defined (__GLIBCXX__) || defined(_LIBCPP_VERSION) || defined(__APPLE__) || defined(__ANDROID_NDK__)
931 while(srcLength > 0 ) {
932 integer actConversionLenght= srcLength;
933 for(
int pass= 0 ; pass < 2 ; ++pass ) {
935 mbstate_t ps; memset( &ps, 0,
sizeof(mbstate_t) );
936 const nchar* srcp= src;
937 size_t wcWritten= mbsnrtowcs( base::vbuffer +
base::length, &srcp,
938 size_t(actConversionLenght),
942 if( wcWritten ==
static_cast<size_t >(-1) ) {
956 actConversionLenght= srcp - src;
962 srcLength-= actConversionLenght;
968 #pragma message ("Unknown Platform in file: " __FILE__ )
975 if constexpr ( std::same_as<TCharSrc, REAL_XCHAR> ) {
976 #if ALIB_SIZEOF_WCHAR_T == 4
980 const char16_t* srcEnd= src + srcLength;
981 while (src < srcEnd) {
982 const char32_t uc = char32_t(*src++);
983 if ((uc - 0xd800) >= 2048) {
984 base::vbuffer[
base::length++] =
static_cast<wchar_t>(uc);
987 && ((uc & 0xfffffc00) == 0xd800)
988 && ((*src & 0xfffffc00) == 0xdc00),
989 "STRINGS",
"Error decoding UTF16" )
990 base::vbuffer[
base::length++]=
static_cast<wchar_t>( (uc << 10)
991 + ((*src++) - 0x35fdc00 ) );
998 const char32_t* srcEnd= src + srcLength;
999 while (src < srcEnd) {
1002 || ( uc >= 0xe000 && uc <= 0x10ffff ),
1003 "STRINGS",
"Illegal unicode 32 bit codepoint" )
1005 if( uc < 0x10000 ) {
1006 base::vbuffer[
base::length++]=
static_cast<wchar_t>( uc );
1009 base::vbuffer[
base::length++]=
static_cast<wchar_t>( ( uc >> 10 ) + 0xd800 );
1010 base::vbuffer[
base::length++]=
static_cast<wchar_t>( ( uc & 0x3ff ) + 0xdc00 );
1020 static_assert( std::same_as<TChar, REAL_XCHAR>,
"Must not happen" );
1022 if constexpr ( std::same_as<TCharSrc, wchar_t> ) {
1023 #if ALIB_SIZEOF_WCHAR_T == 2
1027 const wchar_t* srcEnd= src + srcLength;
1028 while (src < srcEnd) {
1029 const char32_t uc = *src++;
1030 if ((uc - 0xd800) >= 2048) {
1031 base::vbuffer[
base::length++] =
static_cast<REAL_XCHAR
>(uc);
1034 && ((uc & 0xfffffc00) == 0xd800)
1035 && ((*src & 0xfffffc00) == 0xdc00),
1036 "STRINGS",
"Error decoding UTF16" )
1038 base::vbuffer[
base::length++]=
static_cast<REAL_XCHAR
>( (uc << 10)
1039 + ((*src++) - 0x35fdc00 ) );
1046 const wchar_t* srcEnd= src + srcLength;
1047 while (src < srcEnd) {
1050 || ( uc >= 0xe000 && uc <= 0x10ffff ),
1051 "STRINGS",
"Illegal unicode 32 bit codepoint" )
1053 if( uc < 0x10000 ) {
1054 base::vbuffer[
base::length++]=
static_cast<REAL_XCHAR
>( uc );
1057 base::vbuffer[
base::length++]=
static_cast<REAL_XCHAR
>( ( uc >> 10 ) + 0xd800 );
1058 base::vbuffer[
base::length++]=
static_cast<REAL_XCHAR
>( ( uc & 0x3ff ) + 0xdc00 );
1064 if constexpr ( std::same_as<TCharSrc, nchar> ) {
1069 REAL_WCHAR externalBuffer[8192];
1070 externalBuffer[0]= 0;
1071 converter.
SetBuffer( externalBuffer, 8192 );
1072 converter.
Append<
NC>( src, srcLength );
1093 template <
typename TCheck= CHK>
1098 if constexpr ( TCheck::value ) {
1103 if ( srcLength <= 0 ) {
1113 "Nullptr passed with non-checking method version." )
1137 template <
typename TCheck= CHK>
1139 if constexpr ( TCheck::value ) {
1142 if ( src.base::AdjustRegion( regionStart, regionLength ) ) {
1154 && regionStart + regionLength <= src.
Length(),
"STRINGS",
1155 "Non-checking invocation: ",
"Invalid region [{} {}] given. AString length: {}",
1156 regionStart, regionLength, src.
Length() )
1180 template<
typename TCheck= CHK,
typename TAppendable>
1200 template<
typename TCheck= CHK,
typename TStringSource>
1210 const TSrc* buf= TCA::Buffer( src );
1216 const TSrc* buf= TCA::Buffer( src );
1232 template<
typename TCheck= CHK>
1234 if constexpr ( TCheck::value ) {
1260 template<
typename TCheck= CHK>
1263 if ( TCheck::value && src == 0 ) {
1271 if constexpr ( std::same_as< TChar, nchar > ) {
1276 mbLength= WideCharToMultiByte( CP_UTF8, 0, &wc, 1,
1278 MB_LEN_MAX * 2, NULL, NULL );
1279 if ( mbLength <= 0 ) {
1280 ALIB_DBG( DWORD error= GetLastError(); )
1281 ALIB_WARNING(
"STRINGS",
"Cannot convert wide character string to UTF-8. Error: {} ({})",
1282 ( error == ERROR_INSUFFICIENT_BUFFER ?
"ERROR_INSUFFICIENT_BUFFER"
1283 : error == ERROR_INVALID_FLAGS ?
"ERROR_INVALID_FLAGS."
1284 : error == ERROR_INVALID_PARAMETER ?
"ERROR_INVALID_PARAMETER"
1285 : error == ERROR_NO_UNICODE_TRANSLATION ?
"ERROR_NO_UNICODE_TRANSLATION"
1291 mbLength= wctomb(
reinterpret_cast<nchar*
>(base::vbuffer)
1295 if ( mbLength <= 0 ) {
1306 base::vbuffer[
base::length++ ]=
static_cast<TChar
>( src );
1319 template <
typename TCheck= CHK,
class TAppendable >
1333 template <
typename TCheck= CHK>
1335 {
return Append( src, regionStart, regionLength ); }
1345 template <
typename TAppendable>
1379 template <
typename TAppendable>
1400 template <
typename TCheck= CHK,
typename TAppendable>
1429 template <
typename TCheck= CHK>
1433 if constexpr ( TCheck::value ) {
1438 "Non-checking invocation: ",
"Illegal insertion position 0 <= {} < {}.",
1448 base::vbuffer + pos + srcLength );
1468 template <
typename TCheck= CHK>
1471 if constexpr ( TCheck::value ) {
1476 "Non-checking invocation: ",
"Illegal insertion position 0 <= {} < {}. or size {}",
1486 base::vbuffer + pos +
size );
1497 template <
typename TCheck= CHK>
1499 if constexpr ( TCheck::value ) {
1505 "Non-checking invocation: ",
"Negative quantity {} given", qty )
1524 template <
typename TCheck= CHK>
1526 if constexpr ( TCheck::value ) {
1531 "Non-checking invocation: ",
"Negative quantity {} given", qty )
1533 "Non-checking invocation: ",
"Illegal position given: 0 <= {} < {}.", pos,
base::length )
1542 base::vbuffer + pos + qty );
1568 template <
typename TCheck= CHK >
1574 if constexpr ( TCheck::value ) {
1579 if ( (regionEnd= regionStart + regionLength) >=
base::length ) {
1586 "Non-checking invocation: ",
"Illegal arguments. Region start: 0 <= {} < {}.",
1589 "Non-checking invocation: ",
"Illegal arguments. Negative region length {} given.",
1593 if ( (regionEnd= regionStart + regionLength) >=
base::length ) {
1601 base::vbuffer + regionStart );
1617 template <
typename TCheck= CHK >
1621 if constexpr ( TCheck::value ) {
1622 if ( regionLength <= 0 ) {
1630 "Non-checking invocation: ",
"Region length out of range: 0 <= {} < {}.",
1663 template <
typename TCheck= CHK >
1667 if constexpr ( TCheck::value ) {
1668 if ( regionLength > 0 ) {
1676 "Non-checking invocation: ",
"Region length out of range: 0 <= {} < {}.",
1779 template <
typename TCheck= CHK>
1783 if constexpr ( TCheck::value ) {
1787 "Non-checking invocation: ",
"Source string is nulled" )
1793 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
1794 regionStart, regionLength, rs, rl )
1809 base::vbuffer + regionStart + src.
Length() );
1812 src.
CopyTo( base::vbuffer + regionStart );
1830 template <
typename TCheck= CHK>
1832 if constexpr ( TCheck::value ) {
1841 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
1842 regionStart, regionLength, rs, rl )
1901 template <
typename TCheck= CHK>
1903 if constexpr ( TCheck::value ) {
1912 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
1913 regionStart, regionLength, rs, rl )
1928 template <
typename TCheck= CHK>
1930 if constexpr ( TCheck::value ) {
1939 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
1940 regionStart, regionLength, rs, rl )
1954 template <
typename TCheck= CHK>
1956 if constexpr ( TCheck::value ) {
1965 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
1966 regionStart, regionLength, rs, rl )
2029DOX_MARKER( [DOX_MONOMEM_ALLOCMEMBER])
2032DOX_MARKER( [DOX_MONOMEM_ALLOCMEMBER])
2054template<
typename TChar,
typename TAlloc>
2055struct NoAutoCastTraits< TAString<TChar,TAlloc>,
2057 std::basic_string<TChar> > : std::true_type {};
2060namespace characters {
2062template<
typename TChar,
typename TAllocator>
2063struct ArrayTraits<strings::TAString<TChar,TAllocator>, TChar>
2065 using T= strings::TAString<TChar,TAllocator>;
2068 static constexpr const TChar*
Buffer (
const T& src) {
return src.Buffer(); }
2069 static constexpr integer Length (
const T& src) {
return src.Length(); }
2070 static constexpr T
Construct(
const TChar* b,
integer l) {
return T().Append(b, l); }
2073template<
typename TChar,
typename TAllocator>
2074struct ZTArrayTraits<strings::TAString<TChar,TAllocator>, TChar>
2076 using T= strings::TAString<TChar,TAllocator>;
2079 static constexpr const TChar*
Buffer (
const T& src) {
return src.Terminate(); }
2080 static constexpr integer Length (
const T& src) {
return src.Length(); }
2081 static constexpr T
Construct(
const TChar* b,
integer l) {
return T().Append(b, l); }
2099template<
typename TChar,
typename TAllocator>
2108 void*
operator new (size_t);
2111 void*
operator new (size_t,
void*);
2114 void*
operator new[](size_t);
2117 void*
operator new[](size_t,
void*);
2172template<
typename TChar,
typename TAllocator>
2173bool operator== (
const TAString<TChar, TAllocator>& lhs,
const TAString<TChar,TAllocator>& rhs)
2174{
return lhs.
template Equals <CHK, lang::Case::Sensitive>(rhs); }
2177template<
typename TChar,
typename TAllocator,
typename T>
2178requires (!std::is_same_v<T, TAString<TChar,TAllocator>>)
2180{
return lhs.
template Equals <CHK, lang::Case::Sensitive>(rhs); }
2183template<
typename TChar,
typename TAllocator>
2185{
return lhs.
template CompareTo<CHK, lang::Case::Sensitive>(rhs); }
2188template<
typename TChar,
typename TAllocator,
typename T>
2189requires (!std::same_as<TAString<TChar,TAllocator>, T>)
2191{
return lhs.
template CompareTo<CHK, lang::Case::Sensitive>(rhs); }
#define ALIB_ASSERT(cond, domain)
#define ALIB_WARNING(domain,...)
#define ALIB_ERROR(domain,...)
#define ALIB_ASSERT_ERROR(cond, domain,...)
#define ALIB_DEBUG_STRINGS
integer TrimAt(integer idx, const TCString< TChar > &trimChars=CStringConstantsTraits< TChar >::DefaultWhitespaces())
TAString & Delete(integer regionStart, integer regionLength=MAX_LEN)
integer SearchAndReplace(TChar needle, TChar replacement, integer startIdx=0, integer endIdx=strings::MAX_LEN)
TAString & ReplaceSubstring(const TString< TChar > &src, integer regionStart, integer regionLength)
TString< TChar > base
The base string-type.
TChar & operator[](integer idx)
constexpr TChar pop_back()
TAString & Append(const TStringSource &src)
bool dbgWarnWhenExternalBufferIsReplaced
constexpr TAString(TAllocator &pAllocator, TChar *extBuffer, integer extBufferSize)
TAString & Append(const TChar *src, integer srcLength)
TAString & InsertAt(const TString< TChar > &src, integer pos)
TAString & Reverse(integer regionStart=0, integer regionLength=MAX_LEN)
constexpr const TChar * Terminate() const
TAString & DeleteEnd(integer regionLength)
TAString & Reset(const TAppendable &src)
void SetBuffer(integer newCapacity)
TAllocator AllocatorType
Exposes the allocator type specified by template parameter TAllocator.
TAString & DeleteEnd(const TString< TChar > &deleteIfMatch)
TAString & DeleteStart(const TString< TChar > &deleteIfMatch)
TAString & InsertChars(TChar c, integer qty)
TAString & Append(characters::IsCharacter auto src)
TAString(TAString &&move) noexcept
TAString & ReplaceRegion(TChar c, integer regionStart, integer regionLength)
TAString & operator+=(const TAppendable &src)
void SetNull()
Invokes #"SetBuffer(integer);SetBuffer(0)".
TAString & DeleteStart(integer regionLength)
integer SearchAndReplace(const TString< TChar > &needle, const TString< TChar > &replacement, integer startIdx=0, integer maxReplacements=strings::MAX_LEN, lang::Case sensitivity=lang::Case::Sensitive, integer endIdx=strings::MAX_LEN)
TAString & ShortenTo(integer newLength)
void SetBuffer(TChar *extBuffer, integer extBufferSize, integer extLength=0, lang::Responsibility responsibility=lang::Responsibility::KeepWithSender)
integer debugLastAllocRequest
TAString & ToUpper(integer regionStart=0, integer regionLength=MAX_LEN)
typename base::template TRandomAccessIterator< TChar > iterator
TAString & TrimStart(const TCString< TChar > &trimChars=CStringConstantsTraits< TChar >::DefaultWhitespaces())
TAString & Append(const TString< TChar > &src, integer regionStart, integer regionLength=MAX_LEN)
TAString & ShortenBy(integer charsToRemove)
lang::AllocatorMember< TAllocator > allocBase
The type of the base class that stores the allocator.
constexpr TAString(TAllocator &pAllocator)
TAString & InsertUninitialized(integer pos, integer size)
integer DetectLength(integer offset=0)
TAString & _(const TAppendable &src)
reverse_iterator rbegin()
void GrowBufferAtLeastBy(integer minimumGrowth)
bool HasInternalBuffer() const
TAString & operator<<(const TAppendable &src)
TAString(const TAString ©)
TAString & ToLower(integer regionStart=0, integer regionLength=MAX_LEN)
TAString & operator=(const TAString ©)
TAString & InsertChars(TChar c, integer qty, integer pos)
TAString & Append(const TCharSrc *src, integer srcLength)
TAString & _(const TString< TChar > &src, integer regionStart, integer regionLength=MAX_LEN)
constexpr TAString(TChar *extBuffer, integer extBufferSize)
~TAString() noexcept
Destructs an #"%AString" object. An internally allocated buffer will be deleted.
TAString & Trim(const TCString< TChar > &trimChars=CStringConstantsTraits< TChar >::DefaultWhitespaces())
TAString(const TAppendable &src)
void EnsureRemainingCapacity(integer spaceNeeded)
constexpr void push_back(TChar ch)
void DbgDisableBufferReplacementWarning()
void SetLength(integer newLength)
TAString & Append(const TAppendable &src)
void SetCharAt(integer idx, TChar c)
TAString & TrimEnd(const TCString< TChar > &trimChars=CStringConstantsTraits< TChar >::DefaultWhitespaces())
std::reverse_iterator< iterator > reverse_iterator
Same as iterator, but working from the end to the start of the string.
TAString & Append(TChar src)
constexpr TAString()
Constructs an empty, nulled #"%AString" (does not allocate a buffer).
~TStringLengthResetter()
Destructor. Restores the string's original length.
TAString< character, lang::HeapAllocator > & aString
TStringLengthResetter(TAString< TChar, TAllocator > &pAString)
void operator=(const TStringLengthResetter &)
Private assignment operator.
integer CopyTo(TChar *dest) const
const_reverse_iterator rend() const
constexpr integer Length() const
bool EndsWith(const TString &needle) const
constexpr bool IsNotNull() const
const_reverse_iterator rbegin() const
constexpr bool IsNotEmpty() const
const_iterator end() const
bool AdjustRegion(integer ®ionStart, integer ®ionLength) const
integer IndexOfAny(const TString &needles, integer startIdx=0) const
constexpr const TChar * Buffer() const
const_iterator begin() const
constexpr TString() noexcept=default
constexpr bool IsNull() const
bool StartsWith(const TString &needle) const
integer LastIndexOfAny(const TString &needles, integer startIdx=MAX_LEN) const
void Copy(const TChar *src, integer length, TChar *dest)
integer Length(const TChar *cstring)
void Reverse(TChar *src, integer length)
std::conditional_t< ArrayTraits< T, nchar >::Access !=Policy::NONE, nchar, std::conditional_t< ArrayTraits< T, wchar >::Access !=Policy::NONE, wchar, std::conditional_t< ArrayTraits< T, xchar >::Access !=Policy::NONE, xchar, void > > > Type
void Move(const TChar *src, integer length, TChar *dest)
std::conditional_t< ZTArrayTraits< T, nchar >::Access !=Policy::NONE, nchar, std::conditional_t< ZTArrayTraits< T, wchar >::Access !=Policy::NONE, wchar, std::conditional_t< ZTArrayTraits< T, xchar >::Access !=Policy::NONE, xchar, void > > > ZTType
void Fill(TChar *dest, integer length, TChar value)
Case
Denotes upper and lower case character treatment.
@ KeepWithSender
Keeps responsibility, e.g., when passing an object.
constexpr integer MAX_LEN
The maximum length of an ALib string.
auto operator<=>(const String &lhs, const String &rhs)
characters::strangeChar strangeChar
Type alias in namespace #"%alib".
characters::complementChar complementChar
Type alias in namespace #"%alib".
lang::HeapAllocator HeapAllocator
Type alias in namespace #"%alib".
strings::TStringLengthResetter< nchar,lang::HeapAllocator > NStringLengthResetter
Type alias in namespace #"%alib".
strings::TAString< nchar, lang::HeapAllocator > NAString
Type alias in namespace #"%alib".
characters::wchar wchar
Type alias in namespace #"%alib".
lang::integer integer
Type alias in namespace #"%alib".
strings::TStringLengthResetter< complementChar, lang::HeapAllocator > ComplementStringLengthResetter
Type alias in namespace #"%alib".
strings::TAString< xchar, lang::HeapAllocator > XAString
Type alias in namespace #"%alib".
characters::nchar nchar
Type alias in namespace #"%alib".
strings::TAString< strangeChar, lang::HeapAllocator > StrangeAString
Type alias in namespace #"%alib".
strings::TStringLengthResetter< xchar,lang::HeapAllocator > XStringLengthResetter
Type alias in namespace #"%alib".
characters::xchar xchar
Type alias in namespace #"%alib".
strings::TStringLengthResetter< wchar,lang::HeapAllocator > WStringLengthResetter
Type alias in namespace #"%alib".
strings::TAString< wchar, lang::HeapAllocator > WAString
Type alias in namespace #"%alib".
strings::TStringLengthResetter< strangeChar,lang::HeapAllocator > StrangeStringLengthResetter
Type alias in namespace #"%alib".
strings::TAString< complementChar, lang::HeapAllocator > ComplementAString
Type alias in namespace #"%alib".
strings::TAString< character, lang::HeapAllocator > AString
Type alias in namespace #"%alib".
characters::character character
Type alias in namespace #"%alib".
lang::uinteger uinteger
Type alias in namespace #"%alib".
strings::TStringLengthResetter< character,lang::HeapAllocator > StringLengthResetter
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)
TAllocator & GetAllocator() const noexcept
void operator()(TAString< TChar > &target, const TAppendable &src)
static constexpr CString< TChar > DefaultWhitespaces())
"carriage return" and "tabulator", hence " \n\r\t".
static constexpr CString< TChar > NewLine