14template<
typename TComparable>
15requires (!std::is_pointer_v<TComparable> )
17 if( !rhsBox.IsType<TComparable >() )
20 return self.Unbox<TComparable>() == rhsBox.Unbox<TComparable>();
23template<
typename TComparableP>
24requires (std::is_pointer_v<TComparableP>)
26 if( !rhsBox.IsType<TComparableP>() )
29 auto lhs= self .Unbox<TComparableP>();
30 auto rhs= rhsBox.Unbox<TComparableP>();
32 return rhs ==
nullptr;
40template<
typename TComparable>
41requires (!std::is_pointer_v<TComparable>)
43 if( !rhsBox.IsType<TComparable >() )
44 return std::type_index( self.TypeID() ) < std::type_index( rhsBox.TypeID() );
46 return self.Unbox<TComparable>() < rhsBox.Unbox<TComparable>();
49template<
typename TComparableP>
50requires (std::is_pointer_v<TComparableP>)
52 if( !rhsBox.IsType<TComparableP>() )
55 auto lhs= self .Unbox<TComparableP>();
56 auto rhs= rhsBox.Unbox<TComparableP>();
58 return rhs !=
nullptr;
69 "Hash function registered with type of wrong usage length")
71 size_t result= std::
size_t(0x52a6937UL) - (N * 0x387e)
72 + std::
size_t( self.TypeID().hash_code() );
77 if constexpr( N < sizeof(
uinteger ) )
78 return
size_t( ( self.Data().Integrals.UArray[0]
79 & ((Bit1 << (N * 8) )- 1) ) * 92334534 )
83 result+= self.Data().Integrals.UArray[0] * 52424735;
85 if constexpr ( N == sizeof(
uinteger) )
90 return size_t( ( self.Data().Integrals.UArray[1]
91 & ((Bit1 << ((N -
sizeof(
uinteger)) * 8) )- 1) ) * 892112 )
95 return result + self.Data().Integrals.UArray[1] * 485923;
100template<
typename TChar,
typename TAllocator>
101template<
typename TAppendable>
102requires( !std::is_pointer_v<TAppendable> )
104 strings::TAString<TChar, TAllocator>& target ) {
105 target.template Append<NC>( self.Unbox<TAppendable>() );
108template<
typename TChar,
typename TAllocator>
109template<
typename TAppendable>
110requires( std::is_pointer_v<TAppendable> )
112 strings::TAString<TChar, TAllocator>& target ) {
113 auto pointer= self.Unbox<TAppendable>();
115 target.template Append<NC>( *pointer );
118 target << self.TypeID() <<
"(nullptr)";
120 target <<
"(nullptr)";
124template<
typename TChar,
typename TAllocator>
125template<
typename TAppendable>
127 strings::TAString<TChar, TAllocator>& target) {
128 target.template _<NC>( self.Unbox<std::reference_wrapper<TAppendable>>().get() );
131#if !ALIB_SINGLE_THREADED
132inline void FAppend_thread(
const boxing::Box& self,
133 strings::TAString<character,lang::HeapAllocator>& target ) {
135 if ( src ) target << *src;
136 else target <<
"nullptr";
#define ALIB_WARNINGS_IGNORE_INTEGRAL_CONSTANT_OVERFLOW
#define ALIB_WARNINGS_RESTORE
#define ALIB_ASSERT_ERROR(cond, domain,...)
threads::Thread Thread
Type alias in namespace alib.
lang::uinteger uinteger
Type alias in namespace alib.
static void Appendable(const Box &self, strings::TAString< TChar, TAllocator > &target)
static void WrappedAppendable(const Box &self, strings::TAString< TChar, TAllocator > &target)
static bool ComparableTypes(const Box &self, const Box &rhs)
static size_t UsePlaceholderBytes(const Box &self)
static bool ComparableTypes(const Box &self, const Box &rhs)