aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/util.ml8
-rw-r--r--lib/util.mli1
2 files changed, 9 insertions, 0 deletions
diff --git a/lib/util.ml b/lib/util.ml
index 2815af0145..794f1a6ac0 100644
--- a/lib/util.ml
+++ b/lib/util.ml
@@ -1012,6 +1012,14 @@ let array_for_all_i f i v =
let rec allrec i n = n = Array.length v || f i v.(n) && allrec (i+1) (n+1) in
allrec i 0
+exception Found of int
+
+let array_find_i (pred: int -> 'a -> bool) (arr: 'a array) : int option =
+ try
+ for i=0 to Array.length arr - 1 do if pred i (arr.(i)) then raise (Found i) done;
+ None
+ with Found i -> Some i
+
let array_hd v =
match Array.length v with
| 0 -> failwith "array_hd"
diff --git a/lib/util.mli b/lib/util.mli
index 4e2bb6d339..6ab9ce7c4b 100644
--- a/lib/util.mli
+++ b/lib/util.mli
@@ -216,6 +216,7 @@ val array_for_all3 : ('a -> 'b -> 'c -> bool) ->
val array_for_all4 : ('a -> 'b -> 'c -> 'd -> bool) ->
'a array -> 'b array -> 'c array -> 'd array -> bool
val array_for_all_i : (int -> 'a -> bool) -> int -> 'a array -> bool
+val array_find_i : (int -> 'a -> bool) -> 'a array -> int option
val array_hd : 'a array -> 'a
val array_tl : 'a array -> 'a array
val array_last : 'a array -> 'a