Reviewed By: mbouaziz Differential Revision: D9028914 fbshipit-source-id: 5212c8a87master
							parent
							
								
									4ad509269d
								
							
						
					
					
						commit
						66e737a3b4
					
				| @ -0,0 +1,90 @@ | ||||
| (* | ||||
|  * Copyright (c) 2017-present, Facebook, Inc. | ||||
|  * | ||||
|  * This source code is licensed under the MIT license found in the | ||||
|  * LICENSE file in the root directory of this source tree. | ||||
|  *) | ||||
| 
 | ||||
| open! IStd | ||||
| open! AbstractDomain.Types | ||||
| module F = Format | ||||
| 
 | ||||
| module NonZeroInt = struct | ||||
|   type t = int [@@deriving compare] | ||||
| 
 | ||||
|   exception DivisionNotExact | ||||
| 
 | ||||
|   let one = 1 | ||||
| 
 | ||||
|   let minus_one = -1 | ||||
| 
 | ||||
|   let of_int = function 0 -> None | i -> Some i | ||||
| 
 | ||||
|   let opt_to_int = function None -> 0 | Some i -> i | ||||
| 
 | ||||
|   let is_one = Int.equal 1 | ||||
| 
 | ||||
|   let is_minus_one = Int.equal (-1) | ||||
| 
 | ||||
|   let is_multiple mul div = Int.equal (mul mod div) 0 | ||||
| 
 | ||||
|   let is_negative x = x < 0 | ||||
| 
 | ||||
|   let is_positive x = x > 0 | ||||
| 
 | ||||
|   let ( ~- ) = Int.( ~- ) | ||||
| 
 | ||||
|   let ( * ) = Int.( * ) | ||||
| 
 | ||||
|   let plus x y = of_int (x + y) | ||||
| 
 | ||||
|   let exact_div_exn num den = | ||||
|     if not (is_multiple num den) then raise DivisionNotExact ; | ||||
|     num / den | ||||
| 
 | ||||
| 
 | ||||
|   let max = Int.max | ||||
| 
 | ||||
|   let min = Int.min | ||||
| end | ||||
| 
 | ||||
| module NonNegativeInt = struct | ||||
|   type t = int [@@deriving compare] | ||||
| 
 | ||||
|   let zero = 0 | ||||
| 
 | ||||
|   let one = 1 | ||||
| 
 | ||||
|   let is_zero = function 0 -> true | _ -> false | ||||
| 
 | ||||
|   let is_one = function 1 -> true | _ -> false | ||||
| 
 | ||||
|   let of_int i = if i < 0 then None else Some i | ||||
| 
 | ||||
|   let of_int_exn i = | ||||
|     assert (i >= 0) ; | ||||
|     i | ||||
| 
 | ||||
| 
 | ||||
|   let ( <= ) ~lhs ~rhs = Int.(lhs <= rhs) | ||||
| 
 | ||||
|   let ( + ) = Int.( + ) | ||||
| 
 | ||||
|   let ( * ) = Int.( * ) | ||||
| 
 | ||||
|   let max = Int.max | ||||
| 
 | ||||
|   let pp = F.pp_print_int | ||||
| end | ||||
| 
 | ||||
| module PositiveInt = struct | ||||
|   type t = NonNegativeInt.t [@@deriving compare] | ||||
| 
 | ||||
|   let one = 1 | ||||
| 
 | ||||
|   let of_int i = if i <= 0 then None else Some i | ||||
| 
 | ||||
|   let succ = Int.succ | ||||
| 
 | ||||
|   let pp = F.pp_print_int | ||||
| end | ||||
| @ -0,0 +1,84 @@ | ||||
| (* | ||||
|  * Copyright (c) 2017-present, Facebook, Inc. | ||||
|  * | ||||
|  * This source code is licensed under the MIT license found in the | ||||
|  * LICENSE file in the root directory of this source tree. | ||||
|  *) | ||||
| 
 | ||||
| open! IStd | ||||
| 
 | ||||
| module F = Format | ||||
| 
 | ||||
| module NonZeroInt : sig | ||||
|   type t = private int [@@deriving compare] | ||||
| 
 | ||||
|   exception DivisionNotExact | ||||
| 
 | ||||
|   val one : t | ||||
| 
 | ||||
|   val minus_one : t | ||||
| 
 | ||||
|   val of_int : int -> t option | ||||
| 
 | ||||
|   val opt_to_int : t option -> int | ||||
| 
 | ||||
|   val is_one : t -> bool | ||||
| 
 | ||||
|   val is_minus_one : t -> bool | ||||
| 
 | ||||
|   val is_multiple : int -> t -> bool | ||||
| 
 | ||||
|   val is_negative : t -> bool | ||||
| 
 | ||||
|   val is_positive : t -> bool | ||||
| 
 | ||||
|   val ( ~- ) : t -> t | ||||
| 
 | ||||
|   val ( * ) : t -> t -> t | ||||
| 
 | ||||
|   val plus : t -> t -> t option | ||||
| 
 | ||||
|   val exact_div_exn : t -> t -> t | ||||
| 
 | ||||
|   val max : t -> t -> t | ||||
| 
 | ||||
|   val min : t -> t -> t | ||||
| end | ||||
| 
 | ||||
| module NonNegativeInt : sig | ||||
|   type t = private int [@@deriving compare] | ||||
| 
 | ||||
|   val zero : t | ||||
| 
 | ||||
|   val one : t | ||||
| 
 | ||||
|   val of_int : int -> t option | ||||
| 
 | ||||
|   val of_int_exn : int -> t | ||||
| 
 | ||||
|   val is_zero : t -> bool | ||||
| 
 | ||||
|   val is_one : t -> bool | ||||
| 
 | ||||
|   val ( <= ) : lhs:t -> rhs:t -> bool | ||||
| 
 | ||||
|   val ( + ) : t -> t -> t | ||||
| 
 | ||||
|   val ( * ) : t -> t -> t | ||||
| 
 | ||||
|   val max : t -> t -> t | ||||
| 
 | ||||
|   val pp : F.formatter -> t -> unit | ||||
| end | ||||
| 
 | ||||
| module PositiveInt : sig | ||||
|   type t = private NonNegativeInt.t [@@deriving compare] | ||||
| 
 | ||||
|   val one : t | ||||
| 
 | ||||
|   val of_int : int -> t option | ||||
| 
 | ||||
|   val succ : t -> t | ||||
| 
 | ||||
|   val pp : F.formatter -> t -> unit | ||||
| end | ||||
					Loading…
					
					
				
		Reference in new issue