From ff8c47d79c5ec72ac32b32d51c4981ad1a155b9d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20Pottier?= <francois.pottier@inria.fr>
Date: Tue, 14 Jul 2015 13:03:09 +0200
Subject: [PATCH] Modified [E] to use [MySet] instead of [MyMap]. No speed
 gain, but this allows removing [MyMap].

---
 src/LRijkstra.ml | 26 +++++++-------------------
 1 file changed, 7 insertions(+), 19 deletions(-)

diff --git a/src/LRijkstra.ml b/src/LRijkstra.ml
index 13a550285..c425d8994 100644
--- a/src/LRijkstra.ml
+++ b/src/LRijkstra.ml
@@ -88,7 +88,6 @@ let foreach_terminal_not_causing_an_error s f =
 (* ------------------------------------------------------------------------ *)
 
 let id x = x
-let some x = Some x
 
 let update add find none some key m f =
   match find key m with
@@ -102,12 +101,6 @@ let update add find none some key m f =
       let data' = f none in
       add key data' m
 
-module MyMap (X : Map.OrderedType) = struct
-  include Map.Make(X)
-  let update none some key m f =
-    update add find none some key m f
-end
-
 module W : sig
 
   type word
@@ -375,9 +368,9 @@ end = struct
   (* For now, we implement a mapping of [s, nt, a, z] to [w]. *)
 
   module M =
-    MyMap(struct
-      type t = Nonterminal.t * Terminal.t * Terminal.t
-      let compare (nt1, a1, z1) (nt2, a2, z2) =
+    MySet.Make(struct
+      type t = Nonterminal.t * Terminal.t * Terminal.t * W.word
+      let compare (nt1, a1, z1, _w1) (nt2, a2, z2, _w2) =
         let c = Nonterminal.compare nt1 nt2 in
         if c <> 0 then c else
         let c = Terminal.compare a1 a2 in
@@ -394,13 +387,7 @@ end = struct
     let i = Lr1.number s in
     let m = table.(i) in
     let a = W.first w z in
-    let m' = M.update None some (nt, a, z) m (function
-      | None ->
-          w
-      | Some earlier_w ->
-          earlier_w
-      )
-    in
+    let m' = M.add (nt, a, z, w) m in
     m != m' && begin
       incr count;
       table.(i) <- m';
@@ -410,8 +397,9 @@ end = struct
   let query s nt a z f =
     let i = Lr1.number s in
     let m = table.(i) in
-    match M.find (nt, a, z) m with
-    | w -> f w
+    let dummy = W.epsilon in
+    match M.find (nt, a, z, dummy) m with
+    | (_, _, _, w) -> f w
     | exception Not_found -> ()
 
   let stats () =
-- 
GitLab