Changeset 888 for trunk/Packages/Common/BigInt.php
- Timestamp:
- Nov 24, 2020, 10:58:56 AM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Packages/Common/BigInt.php
r870 r888 9 9 // First byte is MSB and last byte is LSB 10 10 11 function BigIntNew($BitWidth) 11 function BigIntNew($BitWidth): string 12 12 { 13 13 return str_repeat(chr(0), $BitWidth >> 3); 14 14 } 15 15 16 function BigIntNewAs($A) 16 function BigIntNewAs($A): string 17 17 { 18 18 return str_repeat(chr(0), strlen($A)); 19 19 } 20 20 21 function BigIntCheck( $A, $B)21 function BigIntCheck(string $A, string $B): void 22 22 { 23 23 if (strlen($A) != strlen($B)) … … 25 25 } 26 26 27 function BigIntAdd( $A, $B)27 function BigIntAdd(string $A, string $B): string 28 28 { 29 29 BigIntCheck($A, $B); … … 40 40 } 41 41 42 function BigIntSub( $A, $B)42 function BigIntSub(string $A, string $B): string 43 43 { 44 44 BigIntCheck($A, $B); … … 55 55 } 56 56 57 function BigIntInc( $A)57 function BigIntInc(string $A): string 58 58 { 59 59 $Result = BigIntNewAs($A); … … 69 69 } 70 70 71 function BigIntDec( $A)71 function BigIntDec(string $A): string 72 72 { 73 73 $Result = BigIntNewAs($A); … … 83 83 } 84 84 85 function BigIntNeg( $A)85 function BigIntNeg(string $A): string 86 86 { 87 87 return BigIntInc(BigIntNot($A)); 88 88 } 89 89 90 function BigIntIsNeg( $A)90 function BigIntIsNeg(string $A): string 91 91 { 92 92 return ord($A[0]) & 0x80; 93 93 } 94 94 95 function BigIntEqual( $A, $B)95 function BigIntEqual(string $A, string $B): bool 96 96 { 97 97 return $A == $B; // Simple string comparison 98 98 } 99 99 100 function BigIntNotEqual( $A, $B)100 function BigIntNotEqual(string $A, string $B): bool 101 101 { 102 102 return $A != $B; // Simple string comparison 103 103 } 104 104 105 function BigIntGreater( $A, $B)105 function BigIntGreater(string $A, string $B): bool 106 106 { 107 107 return BigIntIsNeg(BigIntSub($B, $A)); 108 108 } 109 109 110 function BigIntGreaterOrEqual( $A, $B)110 function BigIntGreaterOrEqual(string $A, string $B): bool 111 111 { 112 112 return BigIntIsNeg(BigIntSub($B, $A)) or BigIntEqual($A, $B); 113 113 } 114 114 115 function BigIntLesser( $A, $B)115 function BigIntLesser(string $A, string $B): bool 116 116 { 117 117 return BigIntIsNeg(BigIntSub($A, $B)); 118 118 } 119 119 120 function BigIntLesserOrEqual( $A, $B)120 function BigIntLesserOrEqual(string $A, string $B): bool 121 121 { 122 122 return BigIntIsNeg(BigIntSub($A, $B)) or BigIntEqual($A, $B); 123 123 } 124 124 125 function BigIntMul( $A, $B)126 { 127 BigIntCheck($A, $B); 128 $Result = BigIntNewAs($A); 129 while (BigIntGreater($B, BigIntNew ()))125 function BigIntMul(string $A, string $B): string 126 { 127 BigIntCheck($A, $B); 128 $Result = BigIntNewAs($A); 129 while (BigIntGreater($B, BigIntNewAs($A))) 130 130 { 131 131 $Result = BigIntAdd($Result, $A); … … 135 135 } 136 136 137 function BigIntDiv( $A, $B)137 function BigIntDiv(string $A, string $B): string 138 138 { 139 139 BigIntCheck($A, $B); … … 147 147 } 148 148 149 function BigIntMod( $A, $B)149 function BigIntMod(string $A, string $B): string 150 150 { 151 151 BigIntCheck($A, $B); … … 159 159 } 160 160 161 function BigIntAnd( $A, $B)161 function BigIntAnd(string $A, string $B): string 162 162 { 163 163 BigIntCheck($A, $B); … … 170 170 } 171 171 172 function BigIntOr( $A, $B)172 function BigIntOr(string $A, string $B): string 173 173 { 174 174 BigIntCheck($A, $B); … … 181 181 } 182 182 183 function BigIntXor( $A, $B)183 function BigIntXor(string $A, string $B): string 184 184 { 185 185 BigIntCheck($A, $B); … … 192 192 } 193 193 194 function BigIntNot( $A)194 function BigIntNot(string $A): string 195 195 { 196 196 $Result = BigIntNewAs($A); … … 202 202 } 203 203 204 function BigIntShl1( $A)204 function BigIntShl1(string $A): string 205 205 { 206 206 $Result = BigIntNewAs($A); … … 213 213 } 214 214 215 function BigIntShl( $A, $B)215 function BigIntShl(string $A, string $B): string 216 216 { 217 217 BigIntCheck($A, $B); … … 224 224 } 225 225 226 function BigIntShr1( $A)226 function BigIntShr1(string $A): string 227 227 { 228 228 $Result = BigIntNewAs($A); … … 235 235 } 236 236 237 function BigIntShr( $A, $B)237 function BigIntShr(string $A, string $B): string 238 238 { 239 239 BigIntCheck($A, $B); … … 246 246 } 247 247 248 function BigIntToHex( $A)248 function BigIntToHex(string $A): string 249 249 { 250 250 $Result = ''; … … 256 256 } 257 257 258 function HexToBigInt( $A, $BitWidth)258 function HexToBigInt(string $A, int $BitWidth): string 259 259 { 260 260 $Result = BigIntNew($BitWidth); … … 275 275 } 276 276 277 function BigIntToBin( $A)277 function BigIntToBin(string $A): string 278 278 { 279 279 $Result = ''; … … 285 285 } 286 286 287 function BinToBigInt( $A, $BitWidth)287 function BinToBigInt(string $A, int $BitWidth): string 288 288 { 289 289 $Result = BigIntNew($BitWidth); … … 305 305 } 306 306 307 function BigIntToInt( $A)307 function BigIntToInt(string $A): int 308 308 { 309 309 // 32-bit int support … … 311 311 } 312 312 313 function IntToBigInt( $A, $BitWidth)313 function IntToBigInt(int $A, int $BitWidth): string 314 314 { 315 315 $Result = BigIntNew($BitWidth); … … 322 322 } 323 323 324 function BigIntToDec( $A)324 function BigIntToDec(string $A): string 325 325 { 326 326 $BitWidth = strlen($A) << 3; … … 335 335 } 336 336 337 function DecToBigInt( $A, $BitWidth)337 function DecToBigInt(string $A, int $BitWidth): string 338 338 { 339 339 $Result = BigIntNew($BitWidth); … … 342 342 { 343 343 $Result = BigIntMul($Result, IntToBigInt(10, $BitWidth)); 344 $Result = BigIntAdd($Result, IntToBigInt(intval($A[$I] , $BitWidth)));344 $Result = BigIntAdd($Result, IntToBigInt(intval($A[$I]), $BitWidth)); 345 345 $I++; 346 346 }
Note:
See TracChangeset
for help on using the changeset viewer.