[replace Bimap with Map in CallDependencies
Helmut Grohne <grohne@cs.uni-bonn.de>**20150129164445
 Ignore-this: 9b7576a25576413543772764752efac5
 
 The CallDep data structure consists of a graph and a mapping between Nodes and
 Names. The graph already labels its Nodes with Names, so whenever we were doing
 a reverse lookup in the Bimap, we can ask the graph instead. By replacing the
 Bimap with a Map, we no longer keep this correspondence in memory twice.
 
 Measurements show that this simplification speeds up the test suite by 0.3%.
] hunk ./src/Igor2/Data/CallDependencies.hs 14
-import Data.Bimap (Bimap)
-import qualified Data.Bimap as B (toAscList, empty, insert, delete, member, lookup, lookupR)
hunk ./src/Igor2/Data/CallDependencies.hs 16
-import qualified Data.Map as M (empty, insert, fromList)
+import qualified Data.Map as M
hunk ./src/Igor2/Data/CallDependencies.hs 81
-    , nodes :: Bimap Name Node    
+    , nodes :: M.Map Name Node
hunk ./src/Igor2/Data/CallDependencies.hs 87
-                 on (==) (B.toAscList . nodes) c1 c2
+                 on (==) (M.toAscList . nodes) c1 c2
hunk ./src/Igor2/Data/CallDependencies.hs 94
-noCalls = CD (Calls G.empty) B.empty
+noCalls = CD (Calls G.empty) M.empty
hunk ./src/Igor2/Data/CallDependencies.hs 152
-         (Just node) -> (mapMaybe $ flip fromNode (nodes cdp)) . (map caller) . (filter ((node==) . callee)) . labEdges . unC . callings $ cdp
+         Just node -> mapMaybe (flip fromNode (callings cdp)) . map caller . filter ((node==) . callee) . G.labEdges . unC . callings $ cdp
hunk ./src/Igor2/Data/CallDependencies.hs 175
-    in mapMaybe ((flip fromNode (nodes cd)). snd) replcbls
+    in mapMaybe (flip fromNode (callings cd) . snd) replcbls
hunk ./src/Igor2/Data/CallDependencies.hs 196
-    -- get the reversed call dependencies: (f,GT) means n -GT-> f 
-    secure = (map (maximumBy (compare `on` snd))) .
-             (groupBy ((==) `on` fst)).
-             (sortBy (compare `on` fst))
-    buildAllowed ns (nd,o) = case (fromNode nd ns,o) of
-        (Just n,GT)  -> [(n, Nothing)]
-        (Just n,EQ)  -> [(n, Just LT)]
-        (Just n,LT)  -> [(n, Just EQ)]
-        (Nothing,_)  -> [] 
-        
+    -- get the reversed call dependencies: (f,GT) means n -GT-> f
+    secure = map (maximumBy (compare `on` snd)) .
+             groupBy ((==) `on` fst) .
+             sortBy (compare `on` fst)
+    buildAllowed ns (nd, o) = case (fromNode nd cs, o) of
+        (Just n, GT)  -> [(n, Nothing)]
+        (Just n, EQ)  -> [(n, Just LT)]
+        (Just n, LT)  -> [(n, Just EQ)]
+        (Nothing, _)  -> [] 
hunk ./src/Igor2/Data/CallDependencies.hs 206
-{- 
+{-
hunk ./src/Igor2/Data/CallDependencies.hs 208
--}    
-asNode :: Name -> Bimap Name Node -> Maybe Node
-asNode n ns =  B.lookup n ns
+-}
+asNode :: Name -> M.Map Name Node -> Maybe Node
+asNode n ns = M.lookup n ns
hunk ./src/Igor2/Data/CallDependencies.hs 214
--}   
-fromNode :: Node -> Bimap Name Node -> Maybe Name
-fromNode n ns = B.lookupR n ns
+-}
+fromNode :: Node -> Calls -> Maybe Name
+fromNode n (Calls g) = G.lab g n
hunk ./src/Igor2/Data/CallDependencies.hs 232
-    if B.member n ns
+    if M.member n ns
hunk ./src/Igor2/Data/CallDependencies.hs 235
-               ns' = B.insert n (noNodes cs')  ns               
+               ns' = M.insert n (G.noNodes cs') ns
hunk ./src/Igor2/Data/CallDependencies.hs 239
-remFunUnsafe n cd@(CD (Calls cs) ns) = 
-    if not $ B.member n ns
+remFunUnsafe n cd@(CD (Calls cs) ns) =
+    if not $ M.member n ns
hunk ./src/Igor2/Data/CallDependencies.hs 242
-      else let cs' = maybe cs id $ liftM (flip delNode cs) (asNode n ns)
-               ns' = B.delete n ns               
+      else let cs' = maybe cs id $ liftM (flip G.delNode cs) (asNode n ns)
+               ns' = M.delete n ns