48template<
typename TAppendable,
73template<
typename T,
typename TChar,
typename TAllocator>
172template<
typename TChar,
typename TAllocator= lang::HeapAllocator>
194 #if ALIB_DEBUG_STRINGS
265 :
base ( extBuffer, 0 )
289 :
base( extBuffer, 0 )
339 if ( !move.HasInternalBuffer() ) {
360 #if ALIB_DEBUG_STRINGS
362 move.buffer=
nullptr;
374 template <
typename TAppendable>
388 ,
size_t(
capacity + 1) *
sizeof(TChar)
410 template<
typename T>
411 constexpr operator T()
const;
413 template<
typename T>
417 std::remove_cv_t<T> >::value)
418 constexpr operator T()
const
422 template<
typename T>
423 requires ( alib::characters::IsExplicitArrayCast <T, TChar>
427 std::remove_cv_t<T> >::value )
428 constexpr explicit operator T()
const
431 template<
typename T>
432 requires ( !alib::characters::IsImplicitArrayCast <T, TChar>
436 std::remove_cv_t<T> >::value )
437 constexpr operator T()
const {
442 template<
typename T>
443 requires ( !alib::characters::IsExplicitArrayCast <T, TChar>
447 std::remove_cv_t<T> >::value )
448 constexpr explicit operator T()
const {
562 #if ALIB_DEBUG_STRINGS
564 "STRINGS",
"Previous allocation request was too short: {} >= {}",
571 #if ALIB_DEBUG_STRINGS
637 TChar*
VBuffer()
const {
return base::vbuffer; }
654 template<
typename TCheck =CHK>
657 "STRINGS",
"Can't write character '\0'" )
658 if constexpr ( TCheck::value ) {
661 *(base::vbuffer + idx )= c;
664 "Non-checking invocation: ",
"Index out of range: 0 <= {} < {}", idx,
base::length )
665 *(base::vbuffer + idx )= c;
681 return base::vbuffer[idx];
684 using base::operator[];
701 "STRINGS",
"Negative AString length {} requested", newLength )
703 "STRINGS",
"Requested AString length {} exceeds capacity {}",
723 "STRINGS",
"Detected AString length {} exceeds capacity {}",
749 "STRINGS",
"Negative AString length {} requested", newLength )
751 "STRINGS",
"Increase from {} to {} of AString length requested",
753 #if ALIB_DEBUG_STRINGS
785 template <
typename TCheck= CHK,
typename TCharSrc >
787 && !std::same_as<TCharSrc,TChar> )
790 if constexpr ( std::same_as<TCheck, alib::CHK> ) {
791 if( !src )
return *
this;
792 if ( srcLength <= 0 ) {
800 #if ALIB_CHARACTERS_NATIVE_WCHAR
801 # define REAL_WCHAR wchar
802 # define REAL_XCHAR xchar
804 # define REAL_WCHAR xchar
805 # define REAL_XCHAR wchar
810 if constexpr ( std::same_as<TChar, nchar> ) {
813 if constexpr ( std::same_as<TCharSrc, REAL_WCHAR> ) {
815 #if defined( _WIN32 )
818 for(
integer bufSizeFactor= 2; bufSizeFactor < 8; ++bufSizeFactor) {
820 int conversionSize= WideCharToMultiByte( CP_UTF8, 0,
821 src,
int( srcLength),
824 if ( conversionSize > 0 ) {
830 int error= GetLastError();
831 if (error == ERROR_INSUFFICIENT_BUFFER ) {
838 "AString: Cannot convert wide character string to UTF-8. Error: {} ({})",
839 ( error == ERROR_INVALID_FLAGS ?
"ERROR_INVALID_FLAGS."
840 : error == ERROR_INVALID_PARAMETER ?
"ERROR_INVALID_PARAMETER"
841 : error == ERROR_NO_UNICODE_TRANSLATION ?
"ERROR_NO_UNICODE_TRANSLATION"
847 ALIB_ERROR(
"STRINGS",
"AString: Cannot convert wide character string to "
848 "UTF-8. Error: ERROR_INSUFFICIENT_BUFFER" )
852 #elif defined (__GLIBCXX__) || defined(_LIBCPP_VERSION) || defined(__APPLE__) || defined(__ANDROID_NDK__)
858 memset( &ps, 0,
sizeof(mbstate_t) );
859 const REAL_WCHAR* srcp= src;
860 size_t conversionSize= wcsnrtombs( base::vbuffer +
base::length, &srcp,
size_t(srcLength),
size_t(maxConversionSize), &ps);
861 if ( conversionSize ==
size_t( -1 ) ) {
863 "Check locale settings (should be UTF-8)" )
867 if ( conversionSize < 1 ) {
868 ALIB_ERROR(
"STRINGS",
"Error converting WCS to MBCS." )
876 #pragma message ("Unknown Platform in file: " __FILE__ )
882 if constexpr ( std::same_as<TCharSrc, REAL_XCHAR> ) {
885 REAL_WCHAR externalBuffer[2048];
886 converter.
SetBuffer( externalBuffer, 2048 );
888 converter.
Append<
NC>( src, srcLength );
895 if constexpr ( std::same_as<TChar, wchar_t> ) {
897 if constexpr ( std::same_as<TCharSrc, nchar> ) {
900 #if defined( _WIN32 )
903 integer conversionSize= MultiByteToWideChar( CP_UTF8, 9,
904 src,
int( srcLength ),
909 if ( conversionSize == 0 ) {
911 int error= GetLastError();
914 "MBCS to WCS conversion failed. Error: {} ({})",
915 ( error == ERROR_INSUFFICIENT_BUFFER ?
"ERROR_INSUFFICIENT_BUFFER."
916 : error == ERROR_INVALID_FLAGS ?
"ERROR_INVALID_FLAGS."
917 : error == ERROR_INVALID_PARAMETER ?
"ERROR_INVALID_PARAMETER"
918 : error == ERROR_NO_UNICODE_TRANSLATION ?
"ERROR_NO_UNICODE_TRANSLATION"
925 "MBCS to WCS conversion failed. Requested length={}, conversion length=",
926 srcLength, conversionSize )
934 #elif defined (__GLIBCXX__) || defined(_LIBCPP_VERSION) || defined(__APPLE__) || defined(__ANDROID_NDK__)
937 while(srcLength > 0 ) {
938 integer actConversionLenght= srcLength;
939 for(
int pass= 0 ; pass < 2 ; ++pass ) {
941 mbstate_t ps; memset( &ps, 0,
sizeof(mbstate_t) );
942 const nchar* srcp= src;
943 size_t wcWritten= mbsnrtowcs( base::vbuffer +
base::length, &srcp,
944 size_t(actConversionLenght),
948 if( wcWritten ==
static_cast<size_t >(-1) ) {
962 actConversionLenght= srcp - src;
968 srcLength-= actConversionLenght;
974 #pragma message ("Unknown Platform in file: " __FILE__ )
981 if constexpr ( std::same_as<TCharSrc, REAL_XCHAR> ) {
982 #if ALIB_SIZEOF_WCHAR_T == 4
986 const char16_t* srcEnd= src + srcLength;
987 while (src < srcEnd) {
988 const char32_t uc = char32_t(*src++);
989 if ((uc - 0xd800) >= 2048) {
990 base::vbuffer[
base::length++] =
static_cast<wchar_t>(uc);
993 && ((uc & 0xfffffc00) == 0xd800)
994 && ((*src & 0xfffffc00) == 0xdc00),
995 "STRINGS",
"Error decoding UTF16" )
996 base::vbuffer[
base::length++]=
static_cast<wchar_t>( (uc << 10)
997 + ((*src++) - 0x35fdc00 ) );
1004 const char32_t* srcEnd= src + srcLength;
1005 while (src < srcEnd) {
1008 || ( uc >= 0xe000 && uc <= 0x10ffff ),
1009 "STRINGS",
"Illegal unicode 32 bit codepoint" )
1011 if( uc < 0x10000 ) {
1012 base::vbuffer[
base::length++]=
static_cast<wchar_t>( uc );
1015 base::vbuffer[
base::length++]=
static_cast<wchar_t>( ( uc >> 10 ) + 0xd800 );
1016 base::vbuffer[
base::length++]=
static_cast<wchar_t>( ( uc & 0x3ff ) + 0xdc00 );
1025 if constexpr ( std::same_as<TChar, REAL_XCHAR> ) {
1027 if constexpr ( std::same_as<TCharSrc, wchar_t> ) {
1028 #if ALIB_SIZEOF_WCHAR_T == 2
1032 const wchar_t* srcEnd= src + srcLength;
1033 while (src < srcEnd) {
1034 const char32_t uc = *src++;
1035 if ((uc - 0xd800) >= 2048) {
1036 base::vbuffer[
base::length++] =
static_cast<REAL_XCHAR
>(uc);
1039 && ((uc & 0xfffffc00) == 0xd800)
1040 && ((*src & 0xfffffc00) == 0xdc00),
1041 "STRINGS",
"Error decoding UTF16" )
1043 base::vbuffer[
base::length++]=
static_cast<REAL_XCHAR
>( (uc << 10)
1044 + ((*src++) - 0x35fdc00 ) );
1051 const wchar_t* srcEnd= src + srcLength;
1052 while (src < srcEnd) {
1055 || ( uc >= 0xe000 && uc <= 0x10ffff ),
1056 "STRINGS",
"Illegal unicode 32 bit codepoint" )
1058 if( uc < 0x10000 ) {
1059 base::vbuffer[
base::length++]=
static_cast<REAL_XCHAR
>( uc );
1062 base::vbuffer[
base::length++]=
static_cast<REAL_XCHAR
>( ( uc >> 10 ) + 0xd800 );
1063 base::vbuffer[
base::length++]=
static_cast<REAL_XCHAR
>( ( uc & 0x3ff ) + 0xdc00 );
1069 if constexpr ( std::same_as<TCharSrc, nchar> ) {
1074 REAL_WCHAR externalBuffer[8192];
1075 externalBuffer[0]= 0;
1076 converter.
SetBuffer( externalBuffer, 8192 );
1077 converter.
Append<
NC>( src, srcLength );
1099 template <
typename TCheck= CHK>
1104 if constexpr ( TCheck::value ) {
1109 if ( srcLength <= 0 ) {
1119 "Nullptr passed with non-checking method version." )
1143 template <
typename TCheck= CHK>
1145 if constexpr ( TCheck::value ) {
1148 if ( src.base::AdjustRegion( regionStart, regionLength ) ) {
1160 && regionStart + regionLength <= src.
Length(),
"STRINGS",
1161 "Non-checking invocation: ",
"Invalid region [{} {}] given. AString length: {}",
1162 regionStart, regionLength, src.
Length() )
1186 template<
typename TCheck= CHK,
typename TAppendable>
1206 template<
typename TCheck= CHK,
typename TStringSource>
1216 const TSrc* buf= TCA::Buffer( src );
1222 const TSrc* buf= TCA::Buffer( src );
1239 template<
typename TCheck= CHK>
1241 if constexpr ( TCheck::value ) {
1267 template<
typename TCheck= CHK>
1270 if ( TCheck::value && src == 0 ) {
1278 if constexpr ( std::same_as< TChar, nchar > ) {
1283 mbLength= WideCharToMultiByte( CP_UTF8, 0, &wc, 1,
1285 MB_LEN_MAX * 2, NULL, NULL );
1286 if ( mbLength <= 0 ) {
1287 ALIB_DBG( DWORD error= GetLastError(); )
1288 ALIB_WARNING(
"STRINGS",
"Cannot convert wide character string to UTF-8. Error: {} ({})",
1289 ( error == ERROR_INSUFFICIENT_BUFFER ?
"ERROR_INSUFFICIENT_BUFFER"
1290 : error == ERROR_INVALID_FLAGS ?
"ERROR_INVALID_FLAGS."
1291 : error == ERROR_INVALID_PARAMETER ?
"ERROR_INVALID_PARAMETER"
1292 : error == ERROR_NO_UNICODE_TRANSLATION ?
"ERROR_NO_UNICODE_TRANSLATION"
1298 mbLength= wctomb(
reinterpret_cast<nchar*
>(base::vbuffer)
1302 if ( mbLength <= 0 ) {
1313 base::vbuffer[
base::length++ ]=
static_cast<TChar
>( src );
1326 template <
typename TCheck= CHK,
class TAppendable >
1340 template <
typename TCheck= CHK>
1342 {
return Append( src, regionStart, regionLength ); }
1352 template <
typename TAppendable>
1386 template <
typename TAppendable>
1406 template <
typename TCheck= CHK,
typename TAppendable>
1435 template <
typename TCheck= CHK>
1439 if constexpr ( TCheck::value ) {
1444 "Non-checking invocation: ",
"Illegal insertion position 0 <= {} < {}.",
1454 base::vbuffer + pos + srcLength );
1474 template <
typename TCheck= CHK>
1477 if constexpr ( TCheck::value ) {
1482 "Non-checking invocation: ",
"Illegal insertion position 0 <= {} < {}. or size {}",
1492 base::vbuffer + pos +
size );
1503 template <
typename TCheck= CHK>
1505 if constexpr ( TCheck::value ) {
1511 "Non-checking invocation: ",
"Negative quantity {} given", qty )
1530 template <
typename TCheck= CHK>
1532 if constexpr ( TCheck::value ) {
1537 "Non-checking invocation: ",
"Negative quantity {} given", qty )
1539 "Non-checking invocation: ",
"Illegal position given: 0 <= {} < {}.", pos,
base::length )
1548 base::vbuffer + pos + qty );
1574 template <
typename TCheck= CHK >
1580 if constexpr ( TCheck::value ) {
1585 if ( (regionEnd= regionStart + regionLength) >=
base::length ) {
1592 "Non-checking invocation: ",
"Illegal arguments. Region start: 0 <= {} < {}.",
1595 "Non-checking invocation: ",
"Illegal arguments. Negative region length {} given.",
1599 if ( (regionEnd= regionStart + regionLength) >=
base::length ) {
1607 base::vbuffer + regionStart );
1623 template <
typename TCheck= CHK >
1627 if constexpr ( TCheck::value ) {
1628 if ( regionLength <= 0 ) {
1636 "Non-checking invocation: ",
"Region length out of range: 0 <= {} < {}.",
1669 template <
typename TCheck= CHK >
1673 if constexpr ( TCheck::value ) {
1674 if ( regionLength > 0 ) {
1682 "Non-checking invocation: ",
"Region length out of range: 0 <= {} < {}.",
1785 template <
typename TCheck= CHK>
1789 if constexpr ( TCheck::value ) {
1793 "Non-checking invocation: ",
"Source string is nulled" )
1799 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
1800 regionStart, regionLength, rs, rl )
1815 base::vbuffer + regionStart + src.
Length() );
1818 src.
CopyTo( base::vbuffer + regionStart );
1836 template <
typename TCheck= CHK>
1838 if constexpr ( TCheck::value ) {
1847 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
1848 regionStart, regionLength, rs, rl )
1907 template <
typename TCheck= CHK>
1909 if constexpr ( TCheck::value ) {
1918 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
1919 regionStart, regionLength, rs, rl )
1934 template <
typename TCheck= CHK>
1936 if constexpr ( TCheck::value ) {
1945 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
1946 regionStart, regionLength, rs, rl )
1960 template <
typename TCheck= CHK>
1962 if constexpr ( TCheck::value ) {
1971 "Non-checking invocation: ",
"Invalid region {}/{} given. Adjusted: {}/{}",
1972 regionStart, regionLength, rs, rl )
2035DOX_MARKER( [DOX_MONOMEM_ALLOCMEMBER])
2038DOX_MARKER( [DOX_MONOMEM_ALLOCMEMBER])
2060template<
typename TChar,
typename TAlloc>
2061struct NoAutoCastTraits< TAString<TChar,TAlloc>,
2063 std::basic_string<TChar> > : std::true_type {};
2066namespace characters {
2068template<
typename TChar,
typename TAllocator>
2069struct ArrayTraits<strings::TAString<TChar,TAllocator>, TChar>
2071 using T= strings::TAString<TChar,TAllocator>;
2074 static constexpr const TChar*
Buffer (
const T& src) {
return src.Buffer(); }
2075 static constexpr integer Length (
const T& src) {
return src.Length(); }
2076 static constexpr T
Construct(
const TChar* b,
integer l) {
return T().Append(b, l); }
2079template<
typename TChar,
typename TAllocator>
2080struct ZTArrayTraits<strings::TAString<TChar,TAllocator>, TChar>
2082 using T= strings::TAString<TChar,TAllocator>;
2085 static constexpr const TChar*
Buffer (
const T& src) {
return src.Terminate(); }
2086 static constexpr integer Length (
const T& src) {
return src.Length(); }
2087 static constexpr T
Construct(
const TChar* b,
integer l) {
return T().Append(b, l); }
2105template<
typename TChar,
typename TAllocator>
2115 void*
operator new (size_t);
2118 void*
operator new (size_t,
void*);
2121 void*
operator new[](size_t);
2124 void*
operator new[](size_t,
void*);
2179template<
typename TChar,
typename TAllocator>
2180bool operator== (
const TAString<TChar, TAllocator>& lhs,
const TAString<TChar,TAllocator>& rhs)
2181{
return lhs.
template Equals <CHK, lang::Case::Sensitive>(rhs); }
2184template<
typename TChar,
typename TAllocator,
typename T>
2185requires (!std::is_same_v<T, TAString<TChar,TAllocator>>)
2187{
return lhs.
template Equals <CHK, lang::Case::Sensitive>(rhs); }
2190template<
typename TChar,
typename TAllocator>
2192{
return lhs.
template CompareTo<CHK, lang::Case::Sensitive>(rhs); }
2195template<
typename TChar,
typename TAllocator,
typename T>
2196requires (!std::same_as<TAString<TChar,TAllocator>, T>)
2198{
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