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