// // Copyright (c) 2021, Brian Frank and Andy Frank // Licensed under the Academic Free License version 3.0 // // History: // 06 Aug 2021 Matthew Giannini Creation // ** ** Immutable arbitrary-precision integer. ** native const class BigInt { ////////////////////////////////////////////////////////////////////////// // Construction ////////////////////////////////////////////////////////////////////////// static new fromStr(Str s, Int radix := 10, Bool checked := true) ** Default value is 0. static const BigInt defVal static const BigInt zero static const BigInt one new makeInt(Int val) new makeBuf(Buf bytes) private new privateMake() ////////////////////////////////////////////////////////////////////////// // Obj ////////////////////////////////////////////////////////////////////////// override Bool equals(Obj? obj) override Int compare(Obj obj) override Str toStr() ////////////////////////////////////////////////////////////////////////// // Identity ////////////////////////////////////////////////////////////////////////// ** -1, 0, 1 if the BigInt is negative, zero, or positive. Int signum() ** Convert the number to an Int. ** ** If the value is out-of-range and checked is true, an Err is thrown. ** Otherwise the value is truncated, with possible loss of sign. Int toInt(Bool checked := true) Buf toBuf() ////////////////////////////////////////////////////////////////////////// // Methods ////////////////////////////////////////////////////////////////////////// ////////// unary ////////// @Operator BigInt negate() @Operator BigInt increment() @Operator BigInt decrement() ////////////////////////////////////////////////////////////////////////// // Bitwise ////////////////////////////////////////////////////////////////////////// BigInt setBit(Int b) BigInt clearBit(Int b) BigInt flipBit(Int b) Bool testBit(Int b) ** Returns the number of bits in the minimal two's-complement ** representation of this BigInteger, excluding a sign bit. Int bitLen() BigInt not() BigInt and(Obj b) BigInt or(Obj b) BigInt xor(Obj b) BigInt shiftl(Int b) BigInt shftr(Int b) }