aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/conv_oracle.ml6
-rw-r--r--kernel/conv_oracle.mli3
2 files changed, 9 insertions, 0 deletions
diff --git a/kernel/conv_oracle.ml b/kernel/conv_oracle.ml
index 32aaacb629..4f2631a66c 100644
--- a/kernel/conv_oracle.ml
+++ b/kernel/conv_oracle.ml
@@ -54,6 +54,12 @@ let set_strategy ({ var_opacity; cst_opacity } as oracle) k l =
else Cmap.add c l cst_opacity }
| RelKey _ -> Errors.error "set_strategy: RelKey"
+let fold_strategy f { var_opacity; cst_opacity; } accu =
+ let fvar id lvl accu = f (VarKey id) lvl accu in
+ let fcst cst lvl accu = f (ConstKey cst) lvl accu in
+ let accu = Id.Map.fold fvar var_opacity accu in
+ Cmap.fold fcst cst_opacity accu
+
let get_transp_state { var_opacity; cst_opacity } =
(Id.Map.fold
(fun id l ts -> if l=Opaque then Id.Pred.remove id ts else ts)
diff --git a/kernel/conv_oracle.mli b/kernel/conv_oracle.mli
index 24797238d4..cd8cd2cf7a 100644
--- a/kernel/conv_oracle.mli
+++ b/kernel/conv_oracle.mli
@@ -35,5 +35,8 @@ val get_strategy : oracle -> 'a tableKey -> level
* Level of RelKey constant cannot be set. *)
val set_strategy : oracle -> 'a tableKey -> level -> oracle
+(** Fold over the non-transparent levels of the oracle. Order unspecified. *)
+val fold_strategy : (unit tableKey -> level -> 'a -> 'a) -> oracle -> 'a -> 'a
+
val get_transp_state : oracle -> transparent_state