Skip to content

Commit 3c42572

Browse files
committed
Implement IsGte_AsUInt32 and IsLte_AsUInt32
1 parent 099bfef commit 3c42572

File tree

1 file changed

+28
-12
lines changed

1 file changed

+28
-12
lines changed

Classes/FCryptoQWORD.uc

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -80,18 +80,6 @@ final static function bool IsGt_AsUInt32(int A, int B)
8080

8181
final static function bool IsLt_AsUInt32(int A, int B)
8282
{
83-
// This is actually "less-than-or-equal"?
84-
// local int Msb;
85-
86-
// Msb = A ^ B;
87-
// Msb = Msb | (Msb >>> 1);
88-
// Msb = Msb | (Msb >>> 2);
89-
// Msb = Msb | (Msb >>> 4);
90-
// Msb = Msb | (Msb >>> 8);
91-
// Msb = Msb | (Msb >>> 16);
92-
// Msb = Msb - (Msb >>> 1);
93-
// return !bool((B & Msb) ^ Msb);
94-
9583
local int Ltb;
9684
local int Gtb;
9785

@@ -111,3 +99,31 @@ final static function bool IsLt_AsUInt32(int A, int B)
11199
// A <= B --> zero. // TODO: does this work?
112100
return bool(Ltb & ~Gtb);
113101
}
102+
103+
final static function bool IsGte_AsUInt32(int A, int B)
104+
{
105+
local int Msb;
106+
107+
Msb = A ^ B;
108+
Msb = Msb | (Msb >>> 1);
109+
Msb = Msb | (Msb >>> 2);
110+
Msb = Msb | (Msb >>> 4);
111+
Msb = Msb | (Msb >>> 8);
112+
Msb = Msb | (Msb >>> 16);
113+
Msb = Msb - (Msb >>> 1);
114+
return !bool((A & Msb) ^ Msb);
115+
}
116+
117+
final static function bool IsLte_AsUInt32(int A, int B)
118+
{
119+
local int Msb;
120+
121+
Msb = A ^ B;
122+
Msb = Msb | (Msb >>> 1);
123+
Msb = Msb | (Msb >>> 2);
124+
Msb = Msb | (Msb >>> 4);
125+
Msb = Msb | (Msb >>> 8);
126+
Msb = Msb | (Msb >>> 16);
127+
Msb = Msb - (Msb >>> 1);
128+
return !bool((B & Msb) ^ Msb);
129+
}

0 commit comments

Comments
 (0)