{-# LANGUAGE RecordWildCards #-}
module Data.DAWG.Int.Dynamic.Node
( Node(..)
, onSym
, edges
, children
, insert
) where
import Data.DAWG.Gen.Types
import Data.DAWG.Gen.Util (combine)
import Data.DAWG.Gen.HashMap (Hash, hash)
import Data.DAWG.Gen.Trans.Map (Trans)
import qualified Data.DAWG.Gen.Trans as T
import qualified Data.DAWG.Gen.Trans.Hashed as H
data Node = Node {
value :: !(Maybe Val)
, transMap :: !(H.Hashed Trans)
} deriving (Show, Eq, Ord)
instance Hash Node where
hash Node{..} = combine (hash value) (H.hash transMap)
onSym :: Sym -> Node -> Maybe ID
onSym x (Node _ t) = T.lookup x t
{-# INLINE onSym #-}
edges :: Node -> [(Sym, ID)]
edges (Node _ t) = T.toList t
{-# INLINE edges #-}
children :: Node -> [ID]
children = map snd . edges
{-# INLINE children #-}
insert :: Sym -> ID -> Node -> Node
insert x i (Node w t) = Node w (T.insert x i t)
{-# INLINE insert #-}