16template<
typename TChar>
26template<
typename TChar>
36template<
typename TChar>
46template<
typename TChar>
61template<
typename TChar, lang::Case sensitivity,
typename TRhs >
62bool Equal( TChar lhs, TRhs rhs ) {
66 if constexpr (
sizeof(TLhs) ==
sizeof(TRhs) )
67 return sensitive ? lhs == rhs
70 else if constexpr (
sizeof(TLhs) <
sizeof(TRhs) )
71 return sensitive ?
static_cast<TRhs
>(lhs) == rhs
74 else if constexpr (
sizeof(TLhs) >
sizeof(TRhs) )
75 return sensitive ? lhs ==
static_cast<TLhs
>(rhs)
88template<
typename TChar>
90{
return integer( std::char_traits<TChar>::length(cstring) ); }
102template<
typename TChar>
104{ std::char_traits<TChar>::copy( dest, src,
size_t(length) ); }
116template<
typename TChar>
118{ std::char_traits<TChar>::move( dest, src,
size_t(length) ); }
128template<
typename TChar>
138template<
typename TChar>
156template<
typename TChar>
157const TChar*
Search(
const TChar* haystack,
integer haystackLength, TChar needle )
158{
return std::char_traits<TChar>::find( haystack,
size_t(haystackLength), needle ); }
180template<
typename TChar>
182 const TChar* needles,
integer needlesLength );
195template<
typename TChar>
218template<
typename TChar>
220 const TChar* needles,
integer needlesLength );
234template<
typename TChar>
255template<
typename TChar>
257 const TChar* needles,
integer needlesLength );
277template<
typename TChar>
279 const TChar* needles,
integer needlesLength );
299template<
typename TChar>
301 const TChar* needle,
integer needleLength,
314template<
typename TChar>
316{ return ::memcmp( lhs, rhs,
size_t(cmpLength) *
sizeof(TChar) ) == 0; }
331template<
typename TChar>
333{
return std::char_traits<TChar>::compare( lhs, rhs,
size_t(cmpLength) ); }
346template<
typename TChar>
356{ memset( dest, c,
size_t(length) ); }
363 nchar* end= src + length;
364 while( src != end ) {
370 nchar* end= src + length;
371 while( src != end ) {
378 #if defined (__GLIBCXX__) || defined(_LIBCPP_VERSION) || defined(__APPLE__) || defined(__ANDROID_NDK__)
379 return ::strncasecmp( lhs, rhs,
size_t(cmpLength) );
380 #elif defined ( _WIN32 )
381 return _strnicmp ( lhs, rhs,
size_t(cmpLength) );
383 #pragma message ( "Unknown Platform in file: " __FILE__ )
388 const nchar* needles ) {
389 const nchar* result= std::strpbrk(haystack, needles);
390 return result ? result - haystack
395{
return integer( std::strspn(haystack, needles) ); }
411{
return static_cast<wchar>(towupper(
static_cast<wint_t
>(c))); }
414{
return static_cast<wchar>(towlower(
static_cast<wint_t
>(c))); }
417 wchar* end= src + length;
418 while( src != end ) {
424 wchar* end= src + length;
425 while( src != end ) {
430#if ALIB_CHARACTERS_NATIVE_WCHAR
432{ wmemset( dest, c,
size_t(length) ); }
436 #if defined ( _WIN32 )
437 return _wcsnicmp ( lhs, rhs,
size_t(cmpLength) );
438 #elif defined (__GLIBCXX__) || defined(_LIBCPP_VERSION) || defined(__APPLE__) || defined(__ANDROID_NDK__)
439 return ::wcsncasecmp( lhs, rhs,
size_t(cmpLength) );
441 #pragma message ( "Unknown Platform in file: " __FILE__ )
446 const wchar* result= std::wcspbrk(haystack, needles);
447 return result ? result - haystack
451{
return integer( std::wcsspn(haystack, needles) ); }
475{
return static_cast<xchar>(towupper(
static_cast<wint_t
>(c))); }
478{
return static_cast<xchar>(towlower(
static_cast<wint_t
>(c))); }
481 xchar* end= src + length;
482 while( src != end ) {
488 xchar* end= src + length;
489 while( src != end ) {
494#if ALIB_CHARACTERS_NATIVE_WCHAR
502 wmemset( dest, c,
size_t(length) );
507 #if defined (__GLIBCXX__)|| defined(_LIBCPP_VERSION) || defined(__APPLE__)
508 return ::wcsncasecmp( lhs, rhs,
size_t(cmpLength) );
509 #elif defined ( _WIN32 )
510 return _wcsnicmp ( lhs, rhs,
size_t(cmpLength) );
512 #pragma message ( "Unknown Platform in file: " __FILE__ )
518 const xchar* result= std::wcspbrk(haystack, needles);
519 return result ? result - haystack
524 return integer( std::wcsspn(haystack, needles) );
566template<
typename TChar=
character,
size_t TLength= 128/
sizeof(TChar)>
571 std::conditional_t<
sizeof(
void*) == 8, std::integral_constant<size_t, 64>,
572 std::integral_constant<size_t, 64>>::value;
598 constexpr void Fill( TChar fillChar )
noexcept
const TChar * Search(const TChar *haystack, integer haystackLength, TChar needle)
void Copy(const TChar *src, integer length, TChar *dest)
PLATFORM_SPECIFIC character
integer Length(const TChar *cstring)
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)
void Reverse(TChar *src, integer length)
integer LastIndexOfAnyInclude(const TChar *haystack, integer startIdx, const TChar *needles, integer needlesLength)
int Compare(const TChar *lhs, const TChar *rhs, integer cmpLength)
void Move(const TChar *src, integer length, TChar *dest)
integer IndexOfAnyIncludedZT(const TChar *haystack, const TChar *needles)
void Fill(TChar *dest, integer length, TChar value)
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)
integer IndexOfAnyExcludedZT(const TChar *haystack, const TChar *needles)
int CompareIgnoreCase(const TChar *lhs, const TChar *rhs, integer cmpLength)
Case
Denotes upper and lower case character treatment.
strings::TFill< character > Fill
Type alias in namespace #"%alib".
characters::AlignedCharArray<> AlignedCharArray
lang::integer integer
Type alias in namespace #"%alib".
characters::nchar nchar
Type alias in namespace #"%alib".
constexpr AlignedCharArray() noexcept=default
Default constructor. Leaves the characters uninitialized.
constexpr integer Length() const noexcept
constexpr TChar * Buffer() noexcept
static constexpr size_t Alignment
constexpr const TChar * Buffer() const noexcept
TChar buffer[TLength]
The buffer.
constexpr void Fill(TChar fillChar) noexcept