89 lines
2.6 KiB
OCaml
89 lines
2.6 KiB
OCaml
(**************************************************************************)
|
|
(* *)
|
|
(* OCaml *)
|
|
(* *)
|
|
(* Pierre Chambart, OCamlPro *)
|
|
(* Mark Shinwell and Leo White, Jane Street Europe *)
|
|
(* *)
|
|
(* Copyright 2013--2016 OCamlPro SAS *)
|
|
(* Copyright 2014--2016 Jane Street Group LLC *)
|
|
(* *)
|
|
(* All rights reserved. This file is distributed under the terms of *)
|
|
(* the GNU Lesser General Public License version 2.1, with the *)
|
|
(* special exception on linking described in the file LICENSE. *)
|
|
(* *)
|
|
(**************************************************************************)
|
|
|
|
module Int_base = Identifiable.Make (struct
|
|
type t = int
|
|
|
|
let compare x y = x - y
|
|
let output oc x = Printf.fprintf oc "%i" x
|
|
let hash i = i
|
|
let equal (i : int) j = i = j
|
|
let print = Format.pp_print_int
|
|
end)
|
|
|
|
module Int = struct
|
|
type t = int
|
|
|
|
include Int_base
|
|
|
|
let rec zero_to_n n =
|
|
if n < 0 then Set.empty else Set.add n (zero_to_n (n-1))
|
|
|
|
let to_string n = Int.to_string n
|
|
end
|
|
|
|
module Int8 = struct
|
|
type t = int
|
|
|
|
let zero = 0
|
|
let one = 1
|
|
|
|
let of_int_exn i =
|
|
if i < -(1 lsl 7) || i > ((1 lsl 7) - 1) then
|
|
Misc.fatal_errorf "Int8.of_int_exn: %d is out of range" i
|
|
else
|
|
i
|
|
|
|
let to_int i = i
|
|
end
|
|
|
|
module Int16 = struct
|
|
type t = int
|
|
|
|
let of_int_exn i =
|
|
if i < -(1 lsl 15) || i > ((1 lsl 15) - 1) then
|
|
Misc.fatal_errorf "Int16.of_int_exn: %d is out of range" i
|
|
else
|
|
i
|
|
|
|
let lower_int64 = Int64.neg (Int64.shift_left Int64.one 15)
|
|
let upper_int64 = Int64.sub (Int64.shift_left Int64.one 15) Int64.one
|
|
|
|
let of_int64_exn i =
|
|
if Int64.compare i lower_int64 < 0
|
|
|| Int64.compare i upper_int64 > 0
|
|
then
|
|
Misc.fatal_errorf "Int16.of_int64_exn: %Ld is out of range" i
|
|
else
|
|
Int64.to_int i
|
|
|
|
let to_int t = t
|
|
end
|
|
|
|
module Float = struct
|
|
type t = float
|
|
|
|
include Identifiable.Make (struct
|
|
type t = float
|
|
|
|
let compare x y = Stdlib.compare x y
|
|
let output oc x = Printf.fprintf oc "%f" x
|
|
let hash f = Hashtbl.hash f
|
|
let equal (i : float) j = i = j
|
|
let print = Format.pp_print_float
|
|
end)
|
|
end
|