6#include "Serialization/Archive.h"
17 uint64 Result = (uint64)A + (uint64)B + (uint64)Carry;
18 Carry = (Result >> 32) & 1;
19 return (uint32)Result;
25 Result = ((uint64)Multiplicand * (uint64)Multiplier) + (uint64)Carry;
27 return (uint32)Result;
32 uint64 Value = ((uint64)Remainder << 32) | Dividend;
33 Remainder = Value % Divisor;
34 return (uint32)(Value / Divisor);
43 case 3:
return Hi >> 32;
44 case 2:
return (uint32)
Hi;
45 case 1:
return Lo >> 32;
46 case 0:
return (uint32)
Lo;
57 case 3:
Hi = (
Hi & 0x00000000ffffffffull) | ((uint64)Value << 32);
break;
58 case 2:
Hi = (
Hi & 0xffffffff00000000ull) | Value;
break;
59 case 1:
Lo = (
Lo & 0x00000000ffffffffull) | ((uint64)Value << 32);
break;
60 case 0:
Lo = (
Lo & 0xffffffff00000000ull) | Value;
break;
104 :
Hi(((uint64)A << 32) | B)
105 ,
Lo(((uint64)C << 32) | D)
113 return Lo > Other
.Lo;
115 return Hi > Other
.Hi;
123 return Lo >= Other
.Lo;
125 return Hi >= Other
.Hi;
133 return Lo < Other
.Lo;
135 return Hi < Other
.Hi;
143 return Lo <= Other
.Lo;
145 return Hi <= Other
.Hi;
172 uint32 AddValue = ~Value + 1;
173 uint32 SignExtend = (AddValue >> 31) ? ~0 : 0;
210
211
248
249
276
277
280 return Ar << Value
.Hi << Value
.Lo;
FORCEINLINE FUInt128 & operator=(FUInt128 const &)=default
FORCEINLINE void Set(uint64 InHi, uint64 InLo)
FORCEINLINE uint32 MultiplyInternal(uint32 Multiplicand, uint32 Multiplier, uint32 &Carry)
FORCEINLINE FUInt128 Add(uint32 Value)
FORCEINLINE FUInt128 & operator=(FUInt128 &&)=default
FORCEINLINE FUInt128(uint64 A, uint64 B)
FORCEINLINE bool operator<(const FUInt128 &Other) const
FORCEINLINE FUInt128 Divide(uint32 Divisor, uint32 &Remainder)
FORCEINLINE bool IsLess(const FUInt128 &Other) const
FORCEINLINE bool IsZero() const
FORCEINLINE bool IsGreaterOrEqual(const FUInt128 &Other) const
FORCEINLINE bool operator==(const FUInt128 &Other) const
FORCEINLINE FUInt128 & operator-=(uint32 Other)
FORCEINLINE bool IsGreater(const FUInt128 &Other) const
FORCEINLINE FUInt128 & operator*=(uint32 Other)
FORCEINLINE bool operator<=(const FUInt128 &Other) const
FORCEINLINE bool operator>(const FUInt128 &Other) const
FORCEINLINE bool IsLessOrEqual(const FUInt128 &Other) const
FORCEINLINE void SetQuadPart(uint32 Part, uint32 Value)
FORCEINLINE uint32 DivideInternal(uint32 Dividend, uint32 Divisor, uint32 &Remainder)
FORCEINLINE FUInt128(uint32 A, uint32 B, uint32 C, uint32 D)
FORCEINLINE bool IsGreaterThanZero() const
FORCEINLINE FUInt128 Multiply(uint32 Multiplier)
FORCEINLINE uint32 AddInternal(uint32 A, uint32 B, uint32 &Carry)
FORCEINLINE bool operator>=(const FUInt128 &Other) const
FORCEINLINE FUInt128 & operator/=(uint32 Other)
FORCEINLINE FUInt128(FUInt128 &&)=default
FORCEINLINE uint32 GetQuadPart(uint32 Part)
FORCEINLINE FUInt128 & operator+=(uint32 Other)
FORCEINLINE bool IsEqual(const FUInt128 &Other) const
FORCEINLINE FUInt128 Sub(uint32 Value)
FORCEINLINE FUInt128(uint64 A)
FORCEINLINE FUInt128(const FUInt128 &)=default