14template<
typename TComparable>
15requires (!std::is_pointer_v<TComparable> )
18 if( !rhsBox.IsType<TComparable >() )
21 return self.Unbox<TComparable>() == rhsBox.Unbox<TComparable>();
24template<
typename TComparableP>
25requires (std::is_pointer_v<TComparableP>)
28 if( !rhsBox.IsType<TComparableP>() )
31 auto lhs= self .Unbox<TComparableP>();
32 auto rhs= rhsBox.Unbox<TComparableP>();
34 return rhs ==
nullptr;
42template<
typename TComparable>
43requires (!std::is_pointer_v<TComparable>)
46 if( !rhsBox.IsType<TComparable >() )
47 return std::type_index( self.TypeID() ) < std::type_index( rhsBox.TypeID() );
49 return self.Unbox<TComparable>() < rhsBox.Unbox<TComparable>();
52template<
typename TComparableP>
53requires (std::is_pointer_v<TComparableP>)
56 if( !rhsBox.IsType<TComparableP>() )
59 auto lhs= self .Unbox<TComparableP>();
60 auto rhs= rhsBox.Unbox<TComparableP>();
62 return rhs !=
nullptr;
74 "Hash function registered with type of wrong usage length")
76 size_t result= std::
size_t(0x52a6937UL) - (N * 0x387e)
77 + std::
size_t( self.TypeID().hash_code() );
82 if constexpr( N < sizeof(
uinteger ) )
83 return
size_t( ( self.Data().Integrals.UArray[0]
84 & ((Bit1 << (N * 8) )- 1) ) * 92334534 )
88 result+= self.Data().Integrals.UArray[0] * 52424735;
90 if constexpr ( N == sizeof(
uinteger) )
96 return size_t( ( self.Data().Integrals.UArray[1]
97 & ((Bit1 << ((N -
sizeof(
uinteger)) * 8) )- 1) ) * 892112 )
101 return result + self.Data().Integrals.UArray[1] * 485923;
106template<
typename TChar,
typename TAllocator>
107template<
typename TAppendable>
108requires( !std::is_pointer_v<TAppendable> )
110 strings::TAString<TChar, TAllocator>& target ) {
111 target.template Append<NC>( self.Unbox<TAppendable>() );
114template<
typename TChar,
typename TAllocator>
115template<
typename TAppendable>
116requires( std::is_pointer_v<TAppendable> )
118 strings::TAString<TChar, TAllocator>& target ) {
119 auto pointer= self.Unbox<TAppendable>();
121 target.template Append<NC>( *pointer );
125 target << self.TypeID() <<
"(nullptr)";
127 target <<
"(nullptr)";
132template<
typename TChar,
typename TAllocator>
133template<
typename TAppendable>
135 strings::TAString<TChar, TAllocator>& target) {
136 target.template _<NC>( self.Unbox<std::reference_wrapper<TAppendable>>().get() );
139#if !ALIB_SINGLE_THREADED
140inline void FAppend_thread(
const boxing::Box& self,
141 strings::TAString<character,lang::HeapAllocator>& target ) {
143 if ( src ) target << *src;
144 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)