mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-08 04:05:30 -05:00
Adding CCNativeint
This commit is contained in:
parent
98bb766de6
commit
8d3981d983
3 changed files with 201 additions and 1 deletions
51
src/core/CCNativeint.ml
Normal file
51
src/core/CCNativeint.ml
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
(* This file is free software, part of containers. See file "license" for more details. *)
|
||||||
|
|
||||||
|
include Nativeint
|
||||||
|
|
||||||
|
let equal (x:t) y = Pervasives.(=) x y
|
||||||
|
|
||||||
|
module Infix = struct
|
||||||
|
let (+) = add
|
||||||
|
|
||||||
|
let (-) = sub
|
||||||
|
|
||||||
|
let (~-) = neg
|
||||||
|
|
||||||
|
let ( * ) = mul
|
||||||
|
|
||||||
|
let (/) = div
|
||||||
|
|
||||||
|
let (mod) = rem
|
||||||
|
|
||||||
|
let (land) = logand
|
||||||
|
|
||||||
|
let (lor) = logor
|
||||||
|
|
||||||
|
let (lxor) = logxor
|
||||||
|
|
||||||
|
let lnot = lognot
|
||||||
|
|
||||||
|
let (lsl) = shift_left
|
||||||
|
|
||||||
|
let (lsr) = shift_right_logical
|
||||||
|
|
||||||
|
let (asr) = shift_right
|
||||||
|
|
||||||
|
let (=) = equal
|
||||||
|
|
||||||
|
let (<>) = Pervasives.(<>)
|
||||||
|
let (<) = Pervasives.(<)
|
||||||
|
let (<=) = Pervasives.(<=)
|
||||||
|
let (>) = Pervasives.(>)
|
||||||
|
let (>=) = Pervasives.(>=)
|
||||||
|
end
|
||||||
|
include Infix
|
||||||
|
|
||||||
|
let hash x = Pervasives.abs (to_int x)
|
||||||
|
|
||||||
|
(** {2 Conversion} *)
|
||||||
|
|
||||||
|
let of_string_exn = of_string
|
||||||
|
|
||||||
|
let of_string x = try Some (of_string_exn x) with Failure _ -> None
|
||||||
|
let of_string_opt = of_string
|
||||||
148
src/core/CCNativeint.mli
Normal file
148
src/core/CCNativeint.mli
Normal file
|
|
@ -0,0 +1,148 @@
|
||||||
|
(* This file is free software, part of containers. See file "license" for more details. *)
|
||||||
|
|
||||||
|
(** {1 Nativeint}
|
||||||
|
|
||||||
|
Helpers for processor-native integers.
|
||||||
|
|
||||||
|
This module provides operations on the type [nativeint] of signed 32-bit integers
|
||||||
|
(on 32-bit platforms) or signed 64-bit integers (on 64-bit platforms).
|
||||||
|
This integer type has exactly the same width as that of a pointer type in the C compiler.
|
||||||
|
All arithmetic operations over nativeint are taken modulo 2{^32} or 2{^64} depending
|
||||||
|
on the word size of the architecture.
|
||||||
|
|
||||||
|
Performance notice: values of type [nativeint] occupy more memory space than values of type [int],
|
||||||
|
and arithmetic operations on [nativeint] are generally slower than those on [int].
|
||||||
|
Use [nativeint] only when the application requires the extra bit of precision over the [int] type.
|
||||||
|
|
||||||
|
@since NEXT_RELEASE *)
|
||||||
|
|
||||||
|
include module type of struct include Nativeint end
|
||||||
|
|
||||||
|
val ( + ) : t -> t -> t
|
||||||
|
(** Addition. *)
|
||||||
|
|
||||||
|
val ( - ) : t -> t -> t
|
||||||
|
(** Subtraction. *)
|
||||||
|
|
||||||
|
val ( ~- ) : t -> t
|
||||||
|
(** Unary negation. *)
|
||||||
|
|
||||||
|
val ( * ) : t -> t -> t
|
||||||
|
(** Multiplication. *)
|
||||||
|
|
||||||
|
val ( / ) : t -> t -> t
|
||||||
|
(** Integer division. Raise [Division_by_zero] if the second
|
||||||
|
argument is zero. This division rounds the real quotient of
|
||||||
|
its arguments towards zero, as specified for {!Pervasives.(/)}. *)
|
||||||
|
|
||||||
|
val ( mod ) : t -> t -> t
|
||||||
|
(** [x mod y ] is the integer remainder.
|
||||||
|
If [y <> zero], the result of [x mod y] satisfies the following properties:
|
||||||
|
[zero <= x mod y < abs y] and
|
||||||
|
[x = ((x / y) * y) + (x mod y)].
|
||||||
|
If [y = 0], [x mod y] raises [Division_by_zero]. *)
|
||||||
|
|
||||||
|
val ( land ) : t -> t -> t
|
||||||
|
(** Bitwise logical and. *)
|
||||||
|
|
||||||
|
val ( lor ) : t -> t -> t
|
||||||
|
(** Bitwise logical or. *)
|
||||||
|
|
||||||
|
val ( lxor ) : t -> t -> t
|
||||||
|
(** Bitwise logical exclusive or. *)
|
||||||
|
|
||||||
|
val lnot : t -> t
|
||||||
|
(** Bitwise logical negation. *)
|
||||||
|
|
||||||
|
val ( lsl ) : t -> int -> t
|
||||||
|
(** [ x lsl y] shifts [x] to the left by [y] bits.
|
||||||
|
The result is unspecified if [y < 0] or [y >= bitsize], where [bitsize] is [32] on a 32-bit platform
|
||||||
|
and [64] on a 64-bit platform. *)
|
||||||
|
|
||||||
|
val ( lsr ) : t -> int -> t
|
||||||
|
(** [x lsr 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 >= bitsize]. *)
|
||||||
|
|
||||||
|
val ( asr ) : t -> int -> t
|
||||||
|
(** [x asr 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 >= bitsize]. *)
|
||||||
|
|
||||||
|
module Infix : sig
|
||||||
|
val (+) : t -> t -> t
|
||||||
|
val (-) : t -> t -> t
|
||||||
|
val (~-) : t -> t
|
||||||
|
val ( * ) : t -> t -> t
|
||||||
|
val (/) : t -> t -> t
|
||||||
|
val (mod) : t -> t -> t
|
||||||
|
val (land) : t -> t -> t
|
||||||
|
val (lor) : t -> t -> t
|
||||||
|
val (lxor) : t -> t -> t
|
||||||
|
val lnot : t -> t
|
||||||
|
val (lsl) : t -> int -> t
|
||||||
|
val (lsr) : t -> int -> t
|
||||||
|
val (asr) : t -> int -> t
|
||||||
|
val (=) : t -> t -> bool
|
||||||
|
val (<>) : t -> t -> bool
|
||||||
|
val (>) : t -> t -> bool
|
||||||
|
val (>=) : t -> t -> bool
|
||||||
|
val (<=) : t -> t -> bool
|
||||||
|
val (<) : t -> t -> bool
|
||||||
|
end
|
||||||
|
|
||||||
|
val equal : t -> t -> bool
|
||||||
|
(** The equal function for native integers.
|
||||||
|
Like {!Pervasives.(=) x y)}. *)
|
||||||
|
|
||||||
|
val hash : t -> int
|
||||||
|
(** Like {!Pervasives.abs (to_int x)}. *)
|
||||||
|
|
||||||
|
(** {2 Conversion} *)
|
||||||
|
|
||||||
|
val to_int : t -> int
|
||||||
|
(** Convert the given native integer (type [nativeint]) to an
|
||||||
|
integer (type [int]). The high-order bit is lost
|
||||||
|
during the conversion. *)
|
||||||
|
|
||||||
|
val of_int : int -> t
|
||||||
|
(** Alias to {!Nativeint.of_int}.
|
||||||
|
Convert the given integer (type [int]) to a native integer (type [nativeint]). *)
|
||||||
|
|
||||||
|
val to_float : t -> float
|
||||||
|
(** Convert the given native integer to a floating-point number. *)
|
||||||
|
|
||||||
|
val of_float : float -> t
|
||||||
|
(** Alias to {!Nativeint.of_float}.
|
||||||
|
Convert the given floating-point number to a native integer,
|
||||||
|
discarding the fractional part (truncate towards 0).
|
||||||
|
The result of the conversion is undefined if, after truncation, the number
|
||||||
|
is outside the range \[{!CCNativeint.min_int}, {!CCNativeint.max_int}\]. *)
|
||||||
|
|
||||||
|
val to_string : t -> string
|
||||||
|
(** Return the string representation of its argument, in decimal. *)
|
||||||
|
|
||||||
|
val of_string_exn : string -> t
|
||||||
|
(** Alias to {!Nativeint.of_string}.
|
||||||
|
Convert the given string to a native 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*CCNativeint.max_int+1]]. If the input exceeds {!CCNativeint.max_int}
|
||||||
|
it is converted to the signed integer
|
||||||
|
[CCInt64.min_int + input - CCNativeint.max_int - 1].
|
||||||
|
|
||||||
|
Raise [Failure "Nativeint.of_string"] if the given string is not
|
||||||
|
a valid representation of an integer, or if the integer represented
|
||||||
|
exceeds the range of integers representable in type [nativeint]. *)
|
||||||
|
|
||||||
|
val of_string : string -> t option
|
||||||
|
(** Safe version of {!of_string_exn}.
|
||||||
|
Like {!of_string_exn}, but return [None] instead of raising. *)
|
||||||
|
|
||||||
|
val of_string_opt : string -> t option
|
||||||
|
(** Alias to {!of_string}. *)
|
||||||
|
|
@ -33,6 +33,7 @@ module IO = CCIO
|
||||||
module List = CCList
|
module List = CCList
|
||||||
module ListLabels = CCListLabels
|
module ListLabels = CCListLabels
|
||||||
module Map = CCMap
|
module Map = CCMap
|
||||||
|
module Nativeint = CCNativeint
|
||||||
module Option = CCOpt
|
module Option = CCOpt
|
||||||
module Ord = CCOrd
|
module Ord = CCOrd
|
||||||
module Pair = CCPair
|
module Pair = CCPair
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue