48template<
typename TAppendable,
73template<
typename T,
typename TChar,
typename TAllocator>
171template<
typename TChar,
typename TAllocator>
194 #if ALIB_DEBUG_STRINGS
272 :
base ( extBuffer, 0 )
296 :
base( extBuffer, 0 )
347 if ( !move.HasInternalBuffer() )
369 #if ALIB_DEBUG_STRINGS
371 move.buffer=
nullptr;
383 template <
typename TAppendable>
401 ,
size_t(
capacity + 1) *
sizeof(TChar)
422 template<
typename T>
426 std::remove_cv_t<T> >::value)
427 constexpr operator T()
const
444 template<
typename T>
445 requires ( alib::characters::IsExplicitArrayCast <T, TChar>
449 std::remove_cv_t<T> >::value )
450 constexpr explicit operator T()
const
466 template<
typename T>
467 requires ( !alib::characters::IsImplicitArrayCast <T, TChar>
471 std::remove_cv_t<T> >::value )
472 constexpr operator T()
const {
491 template<
typename T>
492 requires ( !alib::characters::IsExplicitArrayCast <T, TChar>
496 std::remove_cv_t<T> >::value )
497 constexpr explicit operator T()
const {
614 #if ALIB_DEBUG_STRINGS
616 "STRINGS",
"Previous allocation request was too short: {} >= {}",
623 #if ALIB_DEBUG_STRINGS
702 return base::vbuffer;
720 template<
typename TCheck =CHK>
724 "STRINGS",
"Can't write character '\0'" )
725 if constexpr ( TCheck::value )
729 *(base::vbuffer + idx )= c;
734 "Non-checking invocation: ",
"Index out of range: 0 <= {} < {}", idx,
base::length )
735 *(base::vbuffer + idx )= c;
753 return base::vbuffer[idx];
756 using base::operator[];
774 "STRINGS",
"Negative AString length {} requested", newLength )
776 "STRINGS",
"Requested AString length {} exceeds capacity {}",
793 "STRINGS",
"Detected AString length {} exceeds capacity {}",
819 "STRINGS",
"Negative AString length {} requested", newLength )
821 "STRINGS",
"Increase from {} to {} of AString length requested",
823 #if ALIB_DEBUG_STRINGS
848 template <
typename TCheck= CHK,
typename TCharSrc >
850 && !std::same_as<TCharSrc,TChar> )
853 if constexpr ( std::same_as<TCheck, alib::CHK> ) {
854 if( !src )
return *
this;
855 if ( srcLength <= 0 )
865 #if ALIB_CHARACTERS_NATIVE_WCHAR
866 # define REAL_WCHAR wchar
867 # define REAL_XCHAR xchar
869 # define REAL_WCHAR xchar
870 # define REAL_XCHAR wchar
875 if constexpr ( std::same_as<TChar, nchar> ) {
878 if constexpr ( std::same_as<TCharSrc, REAL_WCHAR> ) {
880 #if defined( _WIN32 )
883 for(
integer bufSizeFactor= 2; bufSizeFactor < 8; ++bufSizeFactor)
886 int conversionSize= WideCharToMultiByte( CP_UTF8, 0,
887 src,
int( srcLength),
890 if ( conversionSize > 0 )
897 int error= GetLastError();
898 if (error == ERROR_INSUFFICIENT_BUFFER )
906 "AString: Cannot convert wide character string to UTF-8. Error: {} ({})",
907 ( error == ERROR_INVALID_FLAGS ?
"ERROR_INVALID_FLAGS."
908 : error == ERROR_INVALID_PARAMETER ?
"ERROR_INVALID_PARAMETER"
909 : error == ERROR_NO_UNICODE_TRANSLATION ?
"ERROR_NO_UNICODE_TRANSLATION"
915 ALIB_ERROR(
"STRINGS",
"AString: Cannot convert wide character string to "
916 "UTF-8. Error: ERROR_INSUFFICIENT_BUFFER" )
920 #elif defined (__GLIBCXX__) || defined(_LIBCPP_VERSION) || defined(__APPLE__) || defined(__ANDROID_NDK__)
926 memset( &ps, 0,
sizeof(mbstate_t) );
927 const REAL_WCHAR* srcp= src;
928 size_t conversionSize= wcsnrtombs( base::vbuffer +
base::length, &srcp,
size_t(srcLength),
size_t(maxConversionSize), &ps);
929 if ( conversionSize ==
size_t( -1 ) )
932 "Check locale settings (should be UTF-8)" )
936 if ( conversionSize < 1 )
938 ALIB_ERROR(
"STRINGS",
"Error converting WCS to MBCS." )
946 #pragma message ("Unknown Platform in file: " __FILE__ )
952 if constexpr ( std::same_as<TCharSrc, REAL_XCHAR> ) {
955 REAL_WCHAR externalBuffer[2048];
956 converter.
SetBuffer( externalBuffer, 2048 );
958 converter.
Append<
NC>( src, srcLength );
965 if constexpr ( std::same_as<TChar, wchar_t> ) {
967 if constexpr ( std::same_as<TCharSrc, nchar> ) {
970 #if defined( _WIN32 )
973 integer conversionSize= MultiByteToWideChar( CP_UTF8, 9,
974 src,
int( srcLength ),
979 if ( conversionSize == 0 )
982 int error= GetLastError();
985 "MBCS to WCS conversion failed. Error: {} ({})",
986 ( error == ERROR_INSUFFICIENT_BUFFER ?
"ERROR_INSUFFICIENT_BUFFER."
987 : error == ERROR_INVALID_FLAGS ?
"ERROR_INVALID_FLAGS."
988 : error == ERROR_INVALID_PARAMETER ?
"ERROR_INVALID_PARAMETER"
989 : error == ERROR_NO_UNICODE_TRANSLATION ?
"ERROR_NO_UNICODE_TRANSLATION"
996 "MBCS to WCS conversion failed. Requested length={}, conversion length=",
997 srcLength, conversionSize )
1005 #elif defined (__GLIBCXX__) || defined(_LIBCPP_VERSION) || defined(__APPLE__) || defined(__ANDROID_NDK__)
1008 while(srcLength > 0 )
1010 integer actConversionLenght= srcLength;
1011 for(
int pass= 0 ; pass < 2 ; ++pass )
1014 mbstate_t ps; memset( &ps, 0,
sizeof(mbstate_t) );
1015 const nchar* srcp= src;
1016 size_t wcWritten= mbsnrtowcs( base::vbuffer +
base::length, &srcp,
1017 size_t(actConversionLenght),
1021 if( wcWritten ==
static_cast<size_t >(-1) )
1037 actConversionLenght= srcp - src;
1043 srcLength-= actConversionLenght;
1050 #pragma message ("Unknown Platform in file: " __FILE__ )
1057 if constexpr ( std::same_as<TCharSrc, REAL_XCHAR> ) {
1058 #if ALIB_SIZEOF_WCHAR_T == 4
1062 const char16_t* srcEnd= src + srcLength;
1063 while (src < srcEnd)
1065 const char32_t uc = *src++;
1066 if ((uc - 0xd800) >= 2048)
1068 base::vbuffer[
base::length++] =
static_cast<wchar_t>(uc);
1073 && ((uc & 0xfffffc00) == 0xd800)
1074 && ((*src & 0xfffffc00) == 0xdc00),
1075 "STRINGS",
"Error decoding UTF16" )
1076 base::vbuffer[
base::length++]=
static_cast<wchar_t>( (uc << 10)
1077 + ((*src++) - 0x35fdc00 ) );
1085 const char32_t* srcEnd= src + srcLength;
1086 while (src < srcEnd)
1090 || ( uc >= 0xe000 && uc <= 0x10ffff ),
1091 "STRINGS",
"Illegal unicode 32 bit codepoint" )
1095 base::vbuffer[
base::length++]=
static_cast<wchar_t>( uc );
1100 base::vbuffer[
base::length++]=
static_cast<wchar_t>( ( uc >> 10 ) + 0xd800 );
1101 base::vbuffer[
base::length++]=
static_cast<wchar_t>( ( uc & 0x3ff ) + 0xdc00 );
1111 if constexpr ( std::same_as<TChar, REAL_XCHAR> ) {
1113 if constexpr ( std::same_as<TCharSrc, wchar_t> ) {
1114 #if ALIB_SIZEOF_WCHAR_T == 2
1118 const wchar_t* srcEnd= src + srcLength;
1119 while (src < srcEnd)
1121 const char32_t uc = *src++;
1122 if ((uc - 0xd800) >= 2048)
1124 base::vbuffer[
base::length++] =
static_cast<REAL_XCHAR
>(uc);
1129 && ((uc & 0xfffffc00) == 0xd800)
1130 && ((*src & 0xfffffc00) == 0xdc00),
1131 "STRINGS",
"Error decoding UTF16" )
1133 base::vbuffer[
base::length++]=
static_cast<REAL_XCHAR
>( (uc << 10)
1134 + ((*src++) - 0x35fdc00 ) );
1142 const wchar_t* srcEnd= src + srcLength;
1143 while (src < srcEnd)
1147 || ( uc >= 0xe000 && uc <= 0x10ffff ),
1148 "STRINGS",
"Illegal unicode 32 bit codepoint" )
1152 base::vbuffer[
base::length++]=
static_cast<REAL_XCHAR
>( uc );
1157 base::vbuffer[
base::length++]=
static_cast<REAL_XCHAR
>( ( uc >> 10 ) + 0xd800 );
1158 base::vbuffer[
base::length++]=
static_cast<REAL_XCHAR
>( ( uc & 0x3ff ) + 0xdc00 );
1165 if constexpr ( std::same_as<TCharSrc, nchar> ) {
1170 REAL_WCHAR externalBuffer[8192];
1171 externalBuffer[0]= 0;
1172 converter.
SetBuffer( externalBuffer, 8192 );
1173 converter.
Append<
NC>( src, srcLength );
1195 template <
typename TCheck= CHK>
1201 if constexpr ( TCheck::value )
1207 if ( srcLength <= 0 )
1220 "Nullptr passed with non-checking method version." )
1244 template <
typename TCheck= CHK>
1247 if constexpr ( TCheck::value )
1251 if ( src.base::AdjustRegion( regionStart, regionLength ) )
1266 && regionStart + regionLength <= src.
Length(),
"STRINGS",
1267 "Non-checking invocation: ",
"Invalid region [{} {}] given. AString length: {}",
1268 regionStart, regionLength, src.
Length() )
1292 template<
typename TCheck= CHK,
typename TAppendable>
1313 template<
typename TCheck= CHK,
typename TStringSource>
1324 const TSrc* buf= TCA::Buffer( src );
1330 const TSrc* buf= TCA::Buffer( src );
1348 template<
typename TCheck= CHK>
1351 if constexpr ( TCheck::value ) {
1377 template<
typename TCheck= CHK>
1381 if ( TCheck::value && src == 0 ) {
1389 if constexpr ( std::same_as< TChar, nchar > )
1395 mbLength= WideCharToMultiByte( CP_UTF8, 0, &wc, 1,
1397 MB_LEN_MAX * 2, NULL, NULL );
1398 if ( mbLength <= 0 )
1400 ALIB_DBG( DWORD error= GetLastError(); )
1401 ALIB_WARNING(
"STRINGS",
"Cannot convert wide character string to UTF-8. Error: {} ({})",
1402 ( error == ERROR_INSUFFICIENT_BUFFER ?
"ERROR_INSUFFICIENT_BUFFER"
1403 : error == ERROR_INVALID_FLAGS ?
"ERROR_INVALID_FLAGS."
1404 : error == ERROR_INVALID_PARAMETER ?
"ERROR_INVALID_PARAMETER"
1405 : error == ERROR_NO_UNICODE_TRANSLATION ?
"ERROR_NO_UNICODE_TRANSLATION"
1411 mbLength= wctomb(
reinterpret_cast<nchar*
>(base::vbuffer)
1415 if ( mbLength <= 0 )
1427 base::vbuffer[
base::length++ ]=
static_cast<TChar
>( src );
1440 template <
typename TCheck= CHK,
class TAppendable >
1454 template <
typename TCheck= CHK>
1456 {
return Append( src, regionStart, regionLength ); }
1466 template <
typename TAppendable>
1500 template <
typename TAppendable>
1520 template <
typename TCheck= CHK,
typename TAppendable>
1551 template <
typename TCheck= CHK>
1556 if constexpr ( TCheck::value )
1564 "Non-checking invocation: ",
"Illegal insertion position 0 <= {} < {}.", pos,
base::length )
1573 base::vbuffer + pos + srcLength );
1586 template <
typename TCheck= CHK>
1589 if constexpr ( TCheck::value )
1596 "Non-checking invocation: ",
"Negative quantity {} given", qty )
1615 template <
typename TCheck= CHK>
1618 if constexpr ( TCheck::value )
1626 "Non-checking invocation: ",
"Negative quantity {} given", qty )
1628 "Non-checking invocation: ",
"Illegal position given: 0 <= {} < {}.", pos,
base::length )
1637 base::vbuffer + pos + qty );
1663 template <
typename TCheck= CHK >
1670 if constexpr ( TCheck::value )
1676 if ( (regionEnd= regionStart + regionLength) >=
base::length )
1686 "Non-checking invocation: ",
"Illegal arguments. Region start: 0 <= {} < {}.",
1689 "Non-checking invocation: ",
"Illegal arguments. Negative region length {} given.",
1693 if ( (regionEnd= regionStart + regionLength) >=
base::length )
1703 base::vbuffer + regionStart );
1719 template <
typename TCheck= CHK >
1724 if constexpr ( TCheck::value )
1726 if ( regionLength <= 0 )
1737 "Non-checking invocation: ",
"Region length out of range: 0 <= {} < {}.",
1771 template <
typename TCheck= CHK >
1776 if constexpr ( TCheck::value )
1778 if ( regionLength > 0 )
1789 "Non-checking invocation: ",
"Region length out of range: 0 <= {} < {}.",
1895 template <
typename TCheck= CHK>
1899 if constexpr ( TCheck::value )
1906 "Non-checking invocation: ",
"Source string is nulled" )
1912 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
1913 regionStart, regionLength, rs, rl )
1928 base::vbuffer + regionStart + src.
Length() );
1931 src.
CopyTo( base::vbuffer + regionStart );
1949 template <
typename TCheck= CHK>
1952 if constexpr ( TCheck::value )
1964 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
1965 regionStart, regionLength, rs, rl )
2020 template <
typename TCheck= CHK>
2023 if constexpr ( TCheck::value )
2035 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
2036 regionStart, regionLength, rs, rl )
2051 template <
typename TCheck= CHK>
2054 if constexpr ( TCheck::value )
2066 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
2067 regionStart, regionLength, rs, rl )
2081 template <
typename TCheck= CHK>
2084 if constexpr ( TCheck::value )
2096 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
2097 regionStart, regionLength, rs, rl )
2160DOX_MARKER( [DOX_MONOMEM_ALLOCMEMBER])
2163DOX_MARKER( [DOX_MONOMEM_ALLOCMEMBER])
2185template<
typename TChar,
typename TAllocator>
2186struct ArrayTraits<
strings::TAString<TChar,TAllocator>, TChar>
2189 static constexpr Policy Access = Policy::Implicit;
2190 static constexpr Policy Construction = Policy::ExplicitOnly;
2191 static constexpr const TChar* Buffer (
const T& src) {
return src.Buffer(); }
2192 static constexpr integer Length (
const T& src) {
return src.Length(); }
2193 static constexpr T Construct(
const TChar* b,
integer l) {
return T().Append(b, l); }
2196template<
typename TChar,
typename TAllocator>
2197struct ZTArrayTraits<
strings::TAString<TChar,TAllocator>, TChar>
2200 static constexpr Policy Access = Policy::Implicit;
2201 static constexpr Policy Construction = Policy::ExplicitOnly;
2202 static constexpr const TChar* Buffer (
const T& src) {
return src.Terminate(); }
2203 static constexpr integer Length (
const T& src) {
return src.Length(); }
2204 static constexpr T Construct(
const TChar* b,
integer l) {
return T().Append(b, l); }
2207}
namespace strings {
2221template<
typename TChar,
typename TAllocator>
2231 void*
operator new (size_t);
2234 void*
operator new (size_t,
void*);
2237 void*
operator new[](size_t);
2240 void*
operator new[](size_t,
void*);
2295template<
typename TChar,
typename TAllocator>
2296bool operator== (
const TAString<TChar, TAllocator>& lhs,
const TAString<TChar,TAllocator>& rhs)
2297{
return lhs.
template Equals <CHK, lang::Case::Sensitive>(rhs); }
2300template<
typename TChar,
typename TAllocator,
typename T>
2301requires (!std::is_same_v<T, TAString<TChar,TAllocator>>)
2303{
return lhs.
template Equals <CHK, lang::Case::Sensitive>(rhs); }
2306template<
typename TChar,
typename TAllocator>
2308{
return lhs.
template CompareTo<CHK, lang::Case::Sensitive>(rhs); }
2311template<
typename TChar,
typename TAllocator,
typename T>
2312requires (!std::same_as<TAString<TChar,TAllocator>, T>)
2314{
return lhs.
template CompareTo<CHK, lang::Case::Sensitive>(rhs); }
TAString & Delete(integer regionStart, integer regionLength=MAX_LEN)
TAString & ReplaceSubstring(const TString< TChar > &src, integer regionStart, integer regionLength)
TChar & operator[](integer idx)
constexpr TChar pop_back()
lang::AllocatorMember< TAllocator > allocBase
The allocator type that TAllocator specifies.
bool dbgWarnWhenExternalBufferIsReplaced
ALIB_DLL void SetBuffer(TChar *extBuffer, integer extBufferSize, integer extLength=0, lang::Responsibility responsibility=lang::Responsibility::KeepWithSender)
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)
TAllocator AllocatorType
Exposes the allocator type specified by template parameter TAllocator.
constexpr const TChar * Terminate() const
TAString & DeleteEnd(integer regionLength)
TAString & Reset(const TAppendable &src)
TAString & DeleteEnd(const TString< TChar > &deleteIfMatch)
TAString & DeleteStart(const TString< TChar > &deleteIfMatch)
TAString & InsertChars(TChar c, integer qty)
TAString & Append(characters::IsCharacter auto src)
ALIB_DLL integer SearchAndReplace(TChar needle, TChar replacement, integer startIdx=0, integer endIdx=strings::MAX_LEN)
TAString(TAString &&move) noexcept
TAString & ReplaceRegion(TChar c, integer regionStart, integer regionLength)
TAString & operator+=(const TAppendable &src)
void SetNull()
Invokes SetBuffer(0).
TAString & DeleteStart(integer regionLength)
TAString & ShortenTo(integer newLength)
integer debugLastAllocRequest
TAString & ToUpper(integer regionStart=0, integer regionLength=MAX_LEN)
ALIB_DLL void SetBuffer(integer newCapacity)
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)
constexpr TAString(TAllocator &pAllocator)
TAString & _(const TAppendable &src)
reverse_iterator rbegin()
bool HasInternalBuffer() const
TAString & operator<<(const TAppendable &src)
TString< TChar > base
The base string-type.
TAString(const TAString ©)
TAString & Append(const TStringSource &src)
TAString & ToLower(integer regionStart=0, integer regionLength=MAX_LEN)
ALIB_DLL integer TrimAt(integer idx, const TCString< TChar > &trimChars=CStringConstantsTraits< TChar >::DefaultWhitespaces())
ALIB_DLL 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 & operator=(const TAString ©)
TAString & InsertChars(TChar c, integer qty, integer pos)
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(const TAppendable &src)
ALIB_DLL TAString & Trim(const TCString< TChar > &trimChars=CStringConstantsTraits< TChar >::DefaultWhitespaces())
TAString & Append(const TAppendable &src)
void EnsureRemainingCapacity(integer spaceNeeded)
TAString & Append(const TCharSrc *src, integer srcLength)
ALIB_DLL void GrowBufferAtLeastBy(integer minimumGrowth)
constexpr void push_back(TChar ch)
void DbgDisableBufferReplacementWarning()
void SetLength(integer newLength)
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
#define ALIB_ASSERT(cond, domain)
#define ALIB_WARNING(domain,...)
#define ALIB_ERROR(domain,...)
#define ALIB_ASSERT_ERROR(cond, domain,...)
#define ALIB_STRING_DBG_CHK(instance)
#define ALIB_DEBUG_STRINGS
void Copy(const TChar *src, integer length, TChar *dest)
integer Length(const TChar *cstring)
void Reverse(TChar *src, integer length)
void Move(const TChar *src, integer length, TChar *dest)
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
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)
strings::TStringLengthResetter< character,lang::HeapAllocator > StringLengthResetter
Type alias in namespace alib.
strings::TAString< strangeChar, lang::HeapAllocator > StrangeAString
Type alias in namespace alib.
strings::TAString< wchar, lang::HeapAllocator > WAString
Type alias in namespace alib.
strings::TStringLengthResetter< complementChar, lang::HeapAllocator > ComplementStringLengthResetter
Type alias in namespace alib.
strings::TAString< character, lang::HeapAllocator > AString
Type alias in namespace alib.
characters::strangeChar strangeChar
Type alias in namespace alib.
strings::TStringLengthResetter< xchar,lang::HeapAllocator > XStringLengthResetter
Type alias in namespace alib.
characters::complementChar complementChar
Type alias in namespace alib.
strings::TStringLengthResetter< wchar,lang::HeapAllocator > WStringLengthResetter
Type alias in namespace alib.
characters::wchar wchar
Type alias in namespace alib.
lang::integer integer
Type alias in namespace alib.
strings::TAString< complementChar, lang::HeapAllocator > ComplementAString
Type alias in namespace alib.
strings::TAString< nchar, lang::HeapAllocator > NAString
Type alias in namespace alib.
characters::nchar nchar
Type alias in namespace alib.
strings::TStringLengthResetter< strangeChar,lang::HeapAllocator > StrangeStringLengthResetter
Type alias in namespace alib.
lang::HeapAllocator HeapAllocator
Type alias in namespace alib.
characters::xchar xchar
Type alias in namespace alib.
strings::TStringLengthResetter< nchar,lang::HeapAllocator > NStringLengthResetter
Type alias in namespace alib.
strings::TAString< xchar, lang::HeapAllocator > XAString
Type alias in namespace alib.
characters::character character
Type alias in namespace alib.
lang::uinteger uinteger
Type alias in namespace alib.
static TStringSource Construct(const TChar *array, integer length)
static TStringSource Construct(const TChar *array, integer length)
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