obdd-0.2.5: src/OBDD/VarIntIntMap.hs
module OBDD.VarIntIntMap where
import qualified OBDD.IntIntMap as I
import qualified Data.Map.Strict as M
import Prelude hiding ( lookup )
newtype VarIntIntMap k v =
VarIntIntMap ( M.Map k ( I.IntIntMap v ))
empty = VarIntIntMap M.empty
lookup (k, i, j) (VarIntIntMap mm) = do
m <- M.lookup k mm
I.lookup (i, j) m
insert (k, i, j) v (VarIntIntMap mm) =
case M.lookup k mm of
Nothing -> VarIntIntMap
$ M.insert k (I.singleton (i, j) v) mm
Just m -> VarIntIntMap
$ M.insert k (I.insert (i, j) v m) mm