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 ); }
181template<
typename TChar>
183 const TChar* needles,
integer needlesLength );
196template<
typename TChar>
220template<
typename TChar>
222 const TChar* needles,
integer needlesLength );
236template<
typename TChar>
257template<
typename TChar>
259 const TChar* needles,
integer needlesLength );
279template<
typename TChar>
281 const TChar* needles,
integer needlesLength );
301template<
typename TChar>
303 const TChar* needle,
integer needleLength,
316template<
typename TChar>
318{ return ::memcmp( lhs, rhs,
size_t(cmpLength) *
sizeof(TChar) ) == 0; }
333template<
typename TChar>
335{
return std::char_traits<TChar>::compare( lhs, rhs,
size_t(cmpLength) ); }
348template<
typename TChar>
358{ memset( dest, c,
size_t(length) ); }
365 nchar* end= src + length;
366 while( src != end ) {
372 nchar* end= src + length;
373 while( src != end ) {
380 #if defined (__GLIBCXX__) || defined(_LIBCPP_VERSION) || defined(__APPLE__) || defined(__ANDROID_NDK__)
381 return ::strncasecmp( lhs, rhs,
size_t(cmpLength) );
382 #elif defined ( _WIN32 )
383 return _strnicmp ( lhs, rhs,
size_t(cmpLength) );
385 #pragma message ( "Unknown Platform in file: " __FILE__ )
390 const nchar* needles ) {
391 const nchar* result= std::strpbrk(haystack, needles);
392 return result ? result - haystack
397{
return integer( std::strspn(haystack, needles) ); }
413{
return static_cast<wchar>(towupper(
static_cast<wint_t
>(c))); }
416{
return static_cast<wchar>(towlower(
static_cast<wint_t
>(c))); }
419 wchar* end= src + length;
420 while( src != end ) {
426 wchar* end= src + length;
427 while( src != end ) {
432#if ALIB_CHARACTERS_NATIVE_WCHAR
434{ wmemset( dest, c,
size_t(length) ); }
438 #if defined ( _WIN32 )
439 return _wcsnicmp ( lhs, rhs,
size_t(cmpLength) );
440 #elif defined (__GLIBCXX__) || defined(_LIBCPP_VERSION) || defined(__APPLE__) || defined(__ANDROID_NDK__)
441 return ::wcsncasecmp( lhs, rhs,
size_t(cmpLength) );
443 #pragma message ( "Unknown Platform in file: " __FILE__ )
448 const wchar* result= std::wcspbrk(haystack, needles);
449 return result ? result - haystack
453{
return integer( std::wcsspn(haystack, needles) ); }
477{
return static_cast<xchar>(towupper(
static_cast<wint_t
>(c))); }
480{
return static_cast<xchar>(towlower(
static_cast<wint_t
>(c))); }
483 xchar* end= src + length;
484 while( src != end ) {
490 xchar* end= src + length;
491 while( src != end ) {
496#if ALIB_CHARACTERS_NATIVE_WCHAR
504 wmemset( dest, c,
size_t(length) );
509 #if defined (__GLIBCXX__)|| defined(_LIBCPP_VERSION) || defined(__APPLE__)
510 return ::wcsncasecmp( lhs, rhs,
size_t(cmpLength) );
511 #elif defined ( _WIN32 )
512 return _wcsnicmp ( lhs, rhs,
size_t(cmpLength) );
514 #pragma message ( "Unknown Platform in file: " __FILE__ )
520 const xchar* result= std::wcspbrk(haystack, needles);
521 return result ? result - haystack
526 return integer( std::wcsspn(haystack, needles) );
568template<
typename TChar=
character,
size_t TLength= 128/
sizeof(TChar)>
573 std::conditional_t<
sizeof(
void*) == 8, std::integral_constant<size_t, 64>,
574 std::integral_constant<size_t, 64>>::value;
600 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