package multibase
Library
Module
Module type
Parameter
Class
Class type
include module type of struct include Optint.Int63 end
63-bit integers.
type t = Optint.Int63.t
The type of integers with exactly 63-bits.
val zero : t
Integer 0.
val one : t
Integer 1.
val minus_one : t
Integer (-1).
Integer division. Raise Division_by_zero
if the second argument is zero. This division rounds the real quotient of its arguments towrds zero.
Integer remainder. If y
is not zero, the result of rem x y
satisfies the following property: x = add (mul (div x y) y) (rem x y)
. if y = 0
, rem x y
raises Division_by_zero
.
val max_int : t
The greatest representable integer.
val min_int : t
The smallest representable integer.
shift_left x y
shifts x
to the left by y
bits. The result is unspecified if y < 0
or y >= (32 || 63)
.
shift_right x y
shifts x
to the right by y
bits. This is an arithmetic shift: the sign bit of x
is replicated and inserted in the vacated bits. The result is unspecified if y < 0
or y >= (32 || 63)
.
shift_right_logical x y
shifts x
to the right by y
bits. This is a logical shift: zeroes are inserted in the vacated bits regardless of the sign of x
/ The result is unspecified if y < 0
or y >= (32 || 63)
.
val of_int : int -> t
Convert the given integer (type int
) to t
. It's an unsafe function whose semantic is different from architecture.
val to_int : t -> int
Convert the given t
integer to an integer (type int
). On 64-bit platforms, the conversion is exact. On 32-bit platforms, the 32-bit integer is taken modulo 2 31, i.e. the high-order bit is lost during the conversion.
val of_int32 : int32 -> t
Convert the given 32-bit integer (type int32
) to t
integer. It's an unsafe function whose semantic is different from architecture.
val of_float : float -> t
val of_string : string -> t
Convert the given string to a t
integer. The string is read in decimal (by default, or if the string begins with 0u
) or in hexadecimal, octal or binary if the string begins with 0x
, 0o
or 0b
respectively.
The 0u
prefix reads the input as an unsigned integer in the range [0, 2 * max_int + 1]
. If the input exceeds max_int
it is converted to the signed integer min_int + input - max_int - 1
.
The _
(underscore) character can appear anywhere in the string is ignored. Raise Failure _
if the given string is not a valid representation of an integer, or if the integer represented exceeds the range of integer, or if the integer represented exceeds the range of integers representable in type t
.
val of_string_opt : string -> t option
Same as of_string
, but return None
instead of raising.
val to_string : t -> string
Return the string representation of its argument, in decimal.
The comparison function for t
integers, with the same specification as Stdlib.compare
. Along with the type t
, this function compare
allows the module Optint
to be passed as argument to the functors Set.Make
and Map.Make
.
val pp : Format.formatter -> t -> unit
The pretty-printer for t
.
Encoding functions
Efficient fixed-length big-endian encoding functions for t
integers:
val encode : bytes -> off:int -> t -> unit
val decode : string -> off:int -> t
val to_unsigned_int32 : t -> int32
val of_unsigned_int32 : int32 -> t
val to_unsigned_int : t -> int
val of_unsigned_int : int -> t
module Infix = Optint.Int63.Infix
module Boxed = Optint.Int63.Boxed
An implementation of 63-bit integers that always uses a boxed representation regardless of word size.
val is_immediate : (t, int, Boxed.t) Optint.Conditional.t
is_immediate
reveals the implementation of t
on the current platform, and can be used to build Int63
operations that behave differently depending on the underlying representation, such as FFIs.