/usr/lib/ocaml/batteries/batIMap.mli is in libbatteries-ocaml-dev 2.6.0-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | (* $Id: iMap.mli,v 1.1 2003/12/19 17:24:34 yori Exp $ *)
(* Copyright 2003 Yamagata Yoriyuki. distributed with LGPL *)
(* Modified by Edgar Friendly <thelema314@gmail.com> *)
(** DIET Maps from integers, packed using ranges *)
(* Note: Lost covariance with use of record for keeping eq *)
type 'a t (*= (int * int * 'a) BatAvlTree.tree*)
type key = int
val empty : eq:('a -> 'a -> bool) -> 'a t
(** The empty map. Needs one parameter: a comparison function for the
values, to enable merging of ranges with identical values. *)
val singleton : eq:('a -> 'a -> bool) -> int -> 'a -> 'a t
val is_empty : 'a t -> bool
(** Test whether a map is empty (i.e. has no bindings) *)
val add : int -> 'a -> 'a t -> 'a t
(** [add x y t] adds a binding from [x] to [y] in [t], returning a new map. *)
val add_range : int -> int -> 'a -> 'a t -> 'a t
(** [add lo hi y t] adds bindings to [y] for all values in the range
[lo,hi], returning a new map *)
val find : int -> 'a t -> 'a
(** [find x t] returns the [y] that is bound to [x] in [t].
@raise Not_found if [x] is unbound *)
val modify : int -> ('a -> 'a) -> 'a t -> 'a t
(** [modify x f t] replaces the [y] that is bound to [x] in [t] by [f y].
@raise Not_found if [x] is unbound
@since 2.1 *)
val modify_def : 'a -> int -> ('a -> 'a) -> 'a t -> 'a t
(** [modify_def dft x f t] does the same as [modify x f t] but binds
[x] to [f dft] if [x] was not bound.
@since 2.1 *)
val modify_opt : int -> ('a option -> 'a option) -> 'a t -> 'a t
(** [modify_opt x f t] allows to modify the binding for [x] in [t]
or absence thereof.
@since 2.1 *)
val remove : int -> 'a t -> 'a t
(** Remove any bindings from the given value. *)
val remove_range : int -> int -> 'a t -> 'a t
(** Remove any bindings within the given range *)
val from : int -> 'a t -> 'a t
(** Return the sub-map of bindings in the range [x,max_int] *)
val after : int -> 'a t -> 'a t
(** Return the sub-map of bindings in the range [x+1,max_int] *)
val until : int -> 'a t -> 'a t
(** Return the sub-map of bindings in the range [min_int, x] *)
val before : int -> 'a t -> 'a t
(** Return the sub-map of bindings in the range [min_int, x-1] *)
val mem : int -> 'a t -> bool
(** Test whether there is a binding from the given int *)
val iter : (int -> 'a -> unit) -> 'a t -> unit
(** [iter f t] calls [f] on every binding *)
val iter_range : (int -> int -> 'a -> unit) -> 'a t -> unit
(** [iter_range f t] calls [f] on every contiguous range. For maps, contiguous ranges must map to the same [y] *)
val map : ?eq:('b -> 'b -> bool) -> ('a -> 'b) -> 'a t -> 'b t
(** Create a new map by modifying each [y] by the given function.
This will not create new ranges; the mapping function is only
applied to each contiguous range once. It is not applied to the
ranges in order. [~eq] defaults to (=). *)
val mapi : ?eq:('b -> 'b -> bool) -> (int -> 'a -> 'b) -> 'a t -> 'b t
(** Create a new map by computing new values based on key and value
of the existing bindings. This can create new ranges, as adjacent
bindings can be assigned different values. [~eq] defaults to (=). *)
val map_range : ?eq:('b -> 'b -> bool) -> (int -> int -> 'a -> 'b) -> 'a t -> 'b t
(** Create a new map by modifying each [y] using the given function.
This will not create new ranges, but will have access to the
[lo,hi] of the current range. [~eq] defaults to (=). *)
val fold : (int -> 'b -> 'a -> 'a) -> 'b t -> 'a -> 'a
(** [fold f t x0] folds all the bindings of [t] into [x0] using [f] to
merge. *)
val fold_range : (int -> int -> 'b -> 'a -> 'a) -> 'b t -> 'a -> 'a
(** [fold_range f t x0] folds all the contiguous ranges of [t] into
[x0] using [f] to merge. The order of foldings is unspecified.*)
val set_to_map : ?eq:('a -> 'a -> bool) -> BatISet.t -> 'a -> 'a t
(** [set_to_map s x] returns a map where every element of [s] is bound
to [x]. *)
val domain : 'a t -> BatISet.t
(** [domain t] returns the set of ints that are bound in [t] *)
val map_to_set : ('a -> bool) -> 'a t -> BatISet.t
(** [map_to_set p t] returns the set of keys of [t] where [p]
evaluates as true *)
val enum : 'a t -> (int * int * 'a) BatEnum.t
(** [enum t] returns an enumeration of the bindings in [t] *)
val of_enum : eq:('a -> 'a -> bool) -> (int * int * 'a) BatEnum.t -> 'a t
(** [of_enum e] returns the set of given ranges *)
val fold2_range : (int -> int -> 'a option -> 'b option -> 'c -> 'c) -> 'a t -> 'b t -> 'c -> 'c
(** [fold2_range f t u x0] folds across each range that's defined in
either [t] or [u] or both, giving that range and the possible values
to [f] to merge with [x0].
Example: let union_first = fold2_range (fun _lo _hi a b = match a,b with Some x,_ -> x | _,Some y -> y)
*)
val union : ('a -> 'a -> 'a) -> 'a t -> 'a t -> 'a t
(** Merge two maps, giving a value *)
val merge : ?eq:('c -> 'c -> bool) -> (int -> int -> 'a option -> 'b option -> 'c option) -> 'a t -> 'b t -> 'c t
val forall2_range : (int -> int -> 'a option -> 'b option -> bool) -> 'a t -> 'b t -> bool
(** Get the equality function used in an IMap.t *)
val get_dec_eq : 'a t -> ('a -> 'a -> bool)
(** Infix operators over a {!BatIMap} *)
module Infix : sig
val (-->) : 'a t -> int -> 'a
(** [map-->key] returns the current binding of [key] in [map],
or @raise Not_found if no such binding exists.
Equivalent to [find key map]. *)
val (<--) : 'a t -> int * 'a -> 'a t
(** [map<--(key, value)] returns a map containing the same bindings as
[map], plus a binding of [key] to [value]. If [key] was already bound
in [map], its previous binding disappears. Equivalent to [add key value map]
{b Important warning}: {!BatIMap.add} takes an optional argument, [eq] that
is missing in this operator [<--]. As a consequence, using [<--] implies the
use of {{:http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#VAL(==)}Pervasives.(==)}
as comparison function.
*)
end
|