aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Herbelin2014-09-13 19:47:30 +0200
committerHugo Herbelin2014-09-13 19:47:30 +0200
commitca913d8b2113f934000ca9dd28e62b210c6f3728 (patch)
tree2e5528f809727808a5e764ee19a0062a7743d863
parentdec08b31fa600eb1cea34915ba6f205f3a6a29e4 (diff)
Exporting apply_subfilter from Evd.ml.
-rw-r--r--pretyping/evd.ml21
-rw-r--r--pretyping/evd.mli4
2 files changed, 16 insertions, 9 deletions
diff --git a/pretyping/evd.ml b/pretyping/evd.ml
index a1f84622a9..aa2ca0009b 100644
--- a/pretyping/evd.ml
+++ b/pretyping/evd.ml
@@ -28,6 +28,7 @@ sig
val filter_array : t -> 'a array -> 'a array
val extend : int -> t -> t
val compose : t -> t -> t
+ val apply_subfilter : t -> bool list -> t
val restrict_upon : t -> int -> (int -> bool) -> t option
val map_along : (bool -> 'a -> bool) -> t -> 'a list -> t
val make : bool list -> t
@@ -81,7 +82,12 @@ struct
| None -> None
| Some f2 -> normalize (CList.filter_with f1 f2)
- let apply_subfilter filter subfilter =
+ let apply_subfilter_array filter subfilter =
+ (** In both cases we statically know that the argument will contain at
+ least one [false] *)
+ match filter with
+ | None -> Some (Array.to_list subfilter)
+ | Some f ->
let len = Array.length subfilter in
let fold b (i, ans) =
if b then
@@ -90,19 +96,16 @@ struct
else
(i, false :: ans)
in
- snd (List.fold_right fold filter (pred len, []))
+ Some (snd (List.fold_right fold f (pred len, [])))
+
+ let apply_subfilter filter subfilter =
+ apply_subfilter_array filter (Array.of_list subfilter)
let restrict_upon f len p =
let newfilter = Array.init len p in
if Array.for_all (fun id -> id) newfilter then None
else
- (** In both cases we statically know that the argument will contain at
- least one [false] *)
- let nf = match f with
- | None -> Some (Array.to_list newfilter)
- | Some f -> Some (apply_subfilter f newfilter)
- in
- Some nf
+ Some (apply_subfilter_array f newfilter)
let map_along f flt l =
let ans = match flt with
diff --git a/pretyping/evd.mli b/pretyping/evd.mli
index be8ca7cd51..bbae32d8ca 100644
--- a/pretyping/evd.mli
+++ b/pretyping/evd.mli
@@ -58,6 +58,10 @@ sig
(** Horizontal composition : [compose f1 f2] only keeps parts of [f2] where
[f1] is set. In particular, [f1] and [f2] must have the same length. *)
+ val apply_subfilter : t -> bool list -> t
+ (** [apply_subfilter f1 f2] applies filter [f2] where [f1] is [true]. In
+ particular, the length of [f2] is the number of times [f1] is [true] *)
+
val restrict_upon : t -> int -> (int -> bool) -> t option
(** Ad-hoc primitive. *)