aboutsummaryrefslogtreecommitdiff
path: root/lib/cMap.ml
diff options
context:
space:
mode:
authorppedrot2013-11-13 15:37:23 +0000
committerppedrot2013-11-13 15:37:23 +0000
commit2fff9290c2da7e815606673bd532a8755fe66dee (patch)
tree950420222cde691276cf466999cf1a7e4ee8a595 /lib/cMap.ml
parent5cea75bd0f028fcea20b7cb4a058202187f5ddcd (diff)
Adding an unsafe mapping function to maps.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@17085 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'lib/cMap.ml')
-rw-r--r--lib/cMap.ml19
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/cMap.ml b/lib/cMap.ml
index 952ec21c69..d8cd2d779a 100644
--- a/lib/cMap.ml
+++ b/lib/cMap.ml
@@ -22,6 +22,10 @@ sig
val modify : key -> (key -> 'a -> 'a) -> 'a t -> 'a t
val domain : 'a t -> Set.t
val bind : (key -> 'a) -> Set.t -> 'a t
+ module Unsafe :
+ sig
+ val map : (key -> 'a -> key * 'b) -> 'a t -> 'b t
+ end
end
module MapExt (M : Map.OrderedType) :
@@ -31,6 +35,10 @@ sig
val modify : M.t -> (M.t -> 'a -> 'a) -> 'a map -> 'a map
val domain : 'a map -> Set.Make(M).t
val bind : (M.t -> 'a) -> Set.Make(M).t -> 'a map
+ module Unsafe :
+ sig
+ val map : (M.t -> 'a -> M.t * 'b) -> 'a map -> 'b map
+ end
end =
struct
(** This unsafe module is a way to access to the actual implementations of
@@ -91,6 +99,17 @@ struct
map_inj (MNode (bind f l, k, f k, bind f r, h))
(** Dual operation of [domain]. *)
+ module Unsafe =
+ struct
+
+ let rec map f (s : 'a map) : 'b map = match map_prj s with
+ | MEmpty -> map_inj MEmpty
+ | MNode (l, k, v, r, h) ->
+ let (k, v) = f k v in
+ map_inj (MNode (map f l, k, v, map f r, h))
+
+ end
+
end
module Make(M : Map.OrderedType) =