signature MLTON_INT_INF =
sig
type t = IntInf.int
val areSmall: t * t -> bool
val gcd: t * t -> t
val isSmall: t -> bool
structure BigWord : WORD
structure SmallInt : INTEGER
datatype rep =
Big of BigWord.word vector
| Small of SmallInt.int
val rep: t -> rep
val fromRep : rep -> t option
end
MLton represents an arbitrary precision integer either as an unboxed word with the bottom bit set to 1 and the top bits representing a small signed integer, or as a pointer to a vector of words, where the first word indicates the sign and the rest are the limbs of a GMP big integer.
-
type t
the same as type
IntInf.int
. -
areSmall (a, b)
returns true iff both
a
andb
are small. -
gcd (a, b)
uses GMP’s fast gcd implementation.
-
isSmall a
returns true iff
a
is small. -
BigWord : WORD
representation of a big
IntInf.int
as a vector of words; on 32-bit platforms,BigWord
is likely to be equivalent toWord32
, and on 64-bit platforms,BigWord
is likely to be equivalent toWord64
. -
SmallInt : INTEGER
representation of a small
IntInf.int
as a signed integer; on 32-bit platforms,SmallInt
is likely to be equivalent toInt32
, and on 64-bit platforms,SmallInt
is likely to be equivalent toInt64
. -
datatype rep
the underlying representation of an
IntInf.int
. -
rep i
returns the underlying representation of
i
. -
fromRep r
converts from the underlying representation back to an
IntInf.int
. IffromRep r
is given anything besides the valid result ofrep i
for somei
, this function call will returnNONE
.