From 582f1aad18552d8e87765e21441d2f3179d8a7d5 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Mon, 19 Feb 2018 19:46:08 -0600 Subject: [PATCH] improve IArray --- src/util/IArray.ml | 14 ++++++++++++++ src/util/IArray.mli | 8 ++++++++ 2 files changed, 22 insertions(+) diff --git a/src/util/IArray.ml b/src/util/IArray.ml index 79196e56..74f882d0 100644 --- a/src/util/IArray.ml +++ b/src/util/IArray.ml @@ -73,6 +73,20 @@ let of_list = Array.of_list let to_list = Array.to_list +let of_list_map f l = + match l with + | [] -> empty + | x :: _ -> + let arr = make (List.length l) (f x) in + List.iteri (fun i x -> Array.unsafe_set arr i (f x)) l; + arr + +let to_list_map f a = + CCArray.fold_right (fun x acc -> f x :: acc) a [] + +let of_array_map = Array.map +let to_array_map = Array.map + let of_array_unsafe a = a (* careful with that axe, Eugene *) let to_seq a k = iter k a diff --git a/src/util/IArray.mli b/src/util/IArray.mli index c1e92712..c86bb785 100644 --- a/src/util/IArray.mli +++ b/src/util/IArray.mli @@ -60,6 +60,14 @@ val of_list : 'a list -> 'a t val to_list : 'a t -> 'a list +val of_list_map : ('a -> 'b) -> 'a list -> 'b t + +val to_list_map : ('a -> 'b) -> 'a t -> 'b list + +val of_array_map : ('a -> 'b) -> 'a array -> 'b t + +val to_array_map : ('a -> 'b) -> 'a t -> 'b array + val of_array_unsafe : 'a array -> 'a t (** Take ownership of the given array. Careful, the array must {b NOT} be modified afterwards! *)