60template<
typename TStringSource,
typename TChar>
86 const TChar*
Buffer(
const TStringSource& src );
134template<
typename TStringSource,
typename TChar>
152 const TChar*
Buffer(
const TStringSource& src );
189template<
typename T,
typename TChar>
227template<
typename T,
typename TChar>
256template <
typename T,
typename TChar>
267template <
typename T,
typename TChar>
281template <
typename T,
typename TChar>
284 && !std::is_const_v<T>;
293template <
typename T,
typename TChar>
304template <
typename T,
typename TChar>
315template <
typename T,
typename TChar>
326template <
typename T,
typename TChar>
339template <
typename T,
typename TChar>
342 && !std::is_const_v<T>;
350template <
typename T,
typename TChar>
359template <
typename T,
typename TChar>
373template<
size_t TCapacity,
typename TChar>
377 static constexpr const TChar*
Buffer( TChar
const (&src) [TCapacity] ) {
return src; }
378 static constexpr integer Length( TChar
const (& ) [TCapacity] ){
return TCapacity -1; }
381template<
size_t TCapacity,
typename TChar>
385 static constexpr const TChar*
Buffer( TChar
const (&src) [TCapacity] ) {
return src; }
386 static constexpr integer Length( TChar
const (& ) [TCapacity] ){
return TCapacity -1; }
390template<
size_t TCapacity>
394 static constexpr const nchar*
Buffer(
char8_t const (&src) [TCapacity] ) {
return reinterpret_cast<const nchar*
>(src); }
395 static constexpr integer Length(
char8_t const (& ) [TCapacity] ) {
return TCapacity -1; }
398template<
size_t TCapacity>
402 static constexpr const nchar*
Buffer(
char8_t const (&src) [TCapacity] ) {
return reinterpret_cast<const nchar*
>(src); }
403 static constexpr integer Length(
char8_t const (& ) [TCapacity] ) {
return TCapacity -1; }
408template<
typename TChar>
struct ArrayTraits<const TChar*, TChar> {
411 static constexpr const TChar* Buffer(
const TChar*
const & src ) {
return src; }
412 static constexpr integer Length(
const TChar*
const & src ) {
return src ?
integer( std::char_traits<TChar>::length(src) ) : 0; }
413 static constexpr const TChar* Construct(
const TChar* array,
integer ) {
return array; }
416template<
typename TChar>
struct ZTArrayTraits<const TChar*, TChar> {
419 static constexpr const TChar* Buffer(
const TChar*
const & src ) {
return src; }
420 static constexpr integer Length(
const TChar*
const & src ) {
return src ?
integer( std::char_traits<TChar>::length(src) ) : 0; }
421 static constexpr const TChar* Construct(
const TChar* array,
integer ) {
return array; }
428 static const nchar* Buffer(
const char8_t*
const & src ) {
return reinterpret_cast<const nchar*
>(src); }
429 static constexpr integer Length(
const char8_t*
const & src ) {
return src ?
integer( std::char_traits<char8_t>::length(src) ) : 0; }
430 static const char8_t* Construct(
const nchar* array,
integer ) {
return reinterpret_cast<const char8_t*
>(array); }
436 static const nchar* Buffer(
const char8_t*
const & src ) {
return reinterpret_cast<const nchar*
>(src); }
437 static constexpr integer Length(
const char8_t*
const & src ) {
return src ?
integer( std::char_traits<char8_t>::length(src) ) : 0; }
438 static const char8_t* Construct(
const nchar* array,
integer ) {
return reinterpret_cast<const char8_t*
>(array); }
442template<
typename TChar>
struct ArrayTraits<TChar*, TChar> {
445 static constexpr const TChar* Buffer( TChar*
const & src ) {
return src; }
446 static constexpr integer Length( TChar*
const & src ) {
return src ?
integer( std::char_traits<TChar>::length(src) ) : 0; }
447 static constexpr TChar* Construct(
const TChar* array,
integer ) {
return const_cast<TChar*
>( array ); }
450template<
typename TChar>
struct ZTArrayTraits<TChar*, TChar> {
453 static constexpr const TChar* Buffer( TChar*
const & src ) {
return src; }
454 static constexpr integer Length( TChar*
const & src ) {
return src ?
integer( std::char_traits<TChar>::length(src) ) : 0; }
455 static constexpr TChar* Construct(
const TChar* array,
integer ) {
return const_cast<TChar*
>( array ); }
462 static const nchar* Buffer(
char8_t*
const & src ) {
return reinterpret_cast<nchar*
>(src); }
463 static constexpr integer Length(
char8_t*
const & src ) {
return src ?
integer( std::char_traits<char8_t>::length(src) ) : 0; }
464 static char8_t* Construct(
const nchar* array,
integer ) {
return const_cast<char8_t*
>(
reinterpret_cast<const char8_t*
>(array) ); }
470 static const nchar* Buffer(
char8_t*
const & src ) {
return reinterpret_cast<nchar*
>(src); }
471 static constexpr integer Length(
char8_t*
const & src ) {
return src ?
integer( std::char_traits<char8_t>::length(src) ) : 0; }
472 static char8_t* Construct(
const nchar* array,
integer ) {
return const_cast<char8_t*
>(
reinterpret_cast<const char8_t*
>(array) ); }
489template<
typename TChar>
491 std::conditional_t<std::same_as<TChar, wchar>,
nchar,
void > >;
508template<
size_t TSizeOf>
510 std::conditional_t<TSizeOf ==
sizeof(
wchar),
wchar,
511 std::conditional_t<TSizeOf ==
sizeof(
xchar),
xchar,
void > > >;
524 || std::is_same_v<T,wchar>
525 || std::is_same_v<T,xchar>;
537 if constexpr (!std::is_array_v<T>)
540 using TChar= std::remove_cv_t<std::remove_pointer_t<std::decay_t<T>>>;
542 return std::extent<T>::value - 1;
543 return std::extent<T>::value;
#define ALIB_POP_ALLOWANCE
std::conditional_t< std::same_as< TChar, nchar >, wchar, std::conditional_t< std::same_as< TChar, wchar >, nchar, void > > ComplementType
integer Length(const TChar *cstring)
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
constexpr integer ArrayLength()
std::conditional_t< TSizeOf==sizeof(nchar), nchar, std::conditional_t< TSizeOf==sizeof(wchar), wchar, std::conditional_t< TSizeOf==sizeof(xchar), xchar, void > > > TypeBySize
lang::integer integer
Type alias in namespace #"%alib".
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)