From: Richard W.M. Jones Date: Tue, 21 Feb 2012 08:49:01 +0000 (+0000) Subject: Miscellaneous utility functions. X-Git-Tag: 0.0.1~26 X-Git-Url: http://git.annexia.org/?p=whenjobs.git;a=commitdiff_plain;h=b237164759a7bae9d3ee19c8368b17384b925b42 Miscellaneous utility functions. --- diff --git a/lib/whenutils.ml b/lib/whenutils.ml index 643da7d..461af5a 100644 --- a/lib/whenutils.ml +++ b/lib/whenutils.ml @@ -31,8 +31,16 @@ module StringMap = struct let values m = fold (fun _ v vs -> v :: vs) m [] end +module IntMap = struct + include Map.Make (struct type t = int let compare = compare end) + let keys m = fold (fun k _ ks -> k :: ks) m [] + let values m = fold (fun _ v vs -> v :: vs) m [] +end + module StringSet = Set.Make (String) +let (//) = Filename.concat + let rec filter_map f = function | [] -> [] | x :: xs -> diff --git a/lib/whenutils.mli b/lib/whenutils.mli index 2d5bbfa..5f62f5c 100644 --- a/lib/whenutils.mli +++ b/lib/whenutils.mli @@ -20,7 +20,7 @@ module StringMap : sig type key = String.t - type 'a t = 'a Map.Make(String).t + type 'a t val empty : 'a t val is_empty : 'a t -> bool val mem : key -> 'a t -> bool @@ -51,6 +51,39 @@ module StringMap : sig end (** A map from string to any type. *) +module IntMap : sig + type key = int + type 'a t + val empty : 'a t + val is_empty : 'a t -> bool + val mem : key -> 'a t -> bool + val add : key -> 'a -> 'a t -> 'a t + (*val singleton : key -> 'a -> 'a t*) + val remove : key -> 'a t -> 'a t + (*val merge : + (key -> 'a option -> 'b option -> 'c option) -> 'a t -> 'b t -> 'c t*) + val compare : ('a -> 'a -> int) -> 'a t -> 'a t -> int + val equal : ('a -> 'a -> bool) -> 'a t -> 'a t -> bool + val iter : (key -> 'a -> unit) -> 'a t -> unit + val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b + (*val for_all : (key -> 'a -> bool) -> 'a t -> bool + val exists : (key -> 'a -> bool) -> 'a t -> bool + val filter : (key -> 'a -> bool) -> 'a t -> 'a t + val partition : (key -> 'a -> bool) -> 'a t -> 'a t * 'a t + val cardinal : 'a t -> int + val bindings : 'a t -> (key * 'a) list + val min_binding : 'a t -> key * 'a + val max_binding : 'a t -> key * 'a + val choose : 'a t -> key * 'a + val split : key -> 'a t -> 'a t * 'a option * 'a t*) + val find : key -> 'a t -> 'a + val map : ('a -> 'b) -> 'a t -> 'b t + val mapi : (key -> 'a -> 'b) -> 'a t -> 'b t + val keys : 'a t -> key list + val values : 'a t -> 'a list +end +(** A map from int to any type. *) + module StringSet : sig type elt = String.t type t = Set.Make(String).t @@ -81,6 +114,9 @@ module StringSet : sig end (** A set of strings. *) +val (//) : string -> string -> string +(** [dir // file] concatenates directory and file. *) + val filter_map : ('a -> 'b option) -> 'a list -> 'b list (** Filter + map. *)