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 )
67 if constexpr (
sizeof(TLhs) ==
sizeof(TRhs) )
68 return sensitive ? lhs == rhs
71 else if constexpr (
sizeof(TLhs) <
sizeof(TRhs) )
72 return sensitive ?
static_cast<TRhs
>(lhs) == rhs
75 else if constexpr (
sizeof(TLhs) >
sizeof(TRhs) )
76 return sensitive ? lhs ==
static_cast<TLhs
>(rhs)
90template<
typename TChar>
93 return integer( std::char_traits<TChar>::length(cstring) );
107template<
typename TChar>
110 std::char_traits<TChar>::copy( dest, src,
size_t(length) );
124template<
typename TChar>
127 std::char_traits<TChar>::move( dest, src,
size_t(length) );
138template<
typename TChar>
148template<
typename TChar>
166template<
typename TChar>
167const TChar*
Search(
const TChar* haystack,
integer haystackLength, TChar needle )
169 return std::char_traits<TChar>::find( haystack,
size_t(haystackLength), needle );
193template<
typename TChar>
195 const TChar* needles,
integer needlesLength );
208template<
typename TChar>
232template<
typename TChar>
234 const TChar* needles,
integer needlesLength );
248template<
typename TChar>
269template<
typename TChar>
271 const TChar* needles,
integer needlesLength );
291template<
typename TChar>
293 const TChar* needles,
integer needlesLength );
313template<
typename TChar>
315 const TChar* needle,
integer needleLength,
328template<
typename TChar>
331 return ::memcmp( lhs, rhs,
size_t(cmpLength) *
sizeof(TChar) ) == 0;
347template<
typename TChar>
350 return std::char_traits<TChar>::compare( lhs, rhs,
size_t(cmpLength) );
364template<
typename TChar>
375 memset( dest, c,
size_t(length) );
380 return static_cast<nchar>( toupper(c) );
385 return static_cast<nchar>( tolower(c) );
390 nchar* end= src + length;
400 nchar* end= src + length;
410 #if defined (__GLIBCXX__) || defined(_LIBCPP_VERSION) || defined(__APPLE__) || defined(__ANDROID_NDK__)
411 return ::strncasecmp( lhs, rhs,
size_t(cmpLength) );
412 #elif defined ( _WIN32 )
413 return _strnicmp ( lhs, rhs,
size_t(cmpLength) );
415 #pragma message ( "Unknown Platform in file: " __FILE__ )
421 const nchar* result= std::strpbrk(haystack, needles);
422 return result ? result - haystack
428 return integer( std::strspn(haystack, needles) );
446 return static_cast<wchar>(towupper(
static_cast<wint_t
>(c)));
451 return static_cast<wchar>(towlower(
static_cast<wint_t
>(c)));
456 wchar* end= src + length;
466 wchar* end= src + length;
474#if ALIB_CHARACTERS_NATIVE_WCHAR
477 wmemset( dest, c,
size_t(length) );
482 #if defined ( _WIN32 )
483 return _wcsnicmp ( lhs, rhs,
size_t(cmpLength) );
484 #elif defined (__GLIBCXX__) || defined(_LIBCPP_VERSION) || defined(__APPLE__) || defined(__ANDROID_NDK__)
485 return ::wcsncasecmp( lhs, rhs,
size_t(cmpLength) );
487 #pragma message ( "Unknown Platform in file: " __FILE__ )
493 const wchar* result= std::wcspbrk(haystack, needles);
494 return result ? result - haystack
499 return integer( std::wcsspn(haystack, needles) );
525 return static_cast<xchar>(towupper(
static_cast<wint_t
>(c)));
530 return static_cast<xchar>(towlower(
static_cast<wint_t
>(c)));
535 xchar* end= src + length;
545 xchar* end= src + length;
553#if ALIB_CHARACTERS_NATIVE_WCHAR
561 wmemset( dest, c,
size_t(length) );
566 #if defined (__GLIBCXX__)|| defined(_LIBCPP_VERSION) || defined(__APPLE__)
567 return ::wcsncasecmp( lhs, rhs,
size_t(cmpLength) );
568 #elif defined ( _WIN32 )
569 return _wcsnicmp ( lhs, rhs,
size_t(cmpLength) );
571 #pragma message ( "Unknown Platform in file: " __FILE__ )
577 const xchar* result= std::wcspbrk(haystack, needles);
578 return result ? result - haystack
583 return integer( std::wcsspn(haystack, needles) );
625template<
typename TChar=
character,
size_t TLength= 128/
sizeof(TChar)>
630 std::conditional_t<
sizeof(
void*) == 8, std::integral_constant<size_t, 64>,
631 std::integral_constant<size_t, 64>>::value;
657 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.
characters::AlignedCharArray<> AlignedCharArray
lang::integer integer
Type alias in namespace alib.
characters::nchar nchar
Type alias in namespace alib.
strings::TFill< character > Fill
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