module Data.Graph.Types where
import Data.HashMap.Mutable.Basic (HashTable)
import Data.Vector (Vector,MVector)
import Data.Primitive.MutVar (MutVar)
import Data.Hashable (Hashable)
import GHC.Generics (Generic)
import qualified Data.Vector.Unboxed as U
import qualified Data.Vector.Unboxed.Mutable as MU
newtype Graph g e v = Graph { getGraphInternal :: SomeGraph e v }
deriving (Functor)
data SomeGraph e v = SomeGraph
{ graphVertices :: !(Vector v)
, graphOutboundNeighborVertices :: !(Vector (U.Vector Int))
, graphOutboundNeighborEdges :: !(Vector (Vector e))
} deriving (Functor)
newtype Size g = Size { getSizeInternal :: Int }
newtype Vertex g = Vertex { getVertexInternal :: Int }
deriving (Eq,Ord,Hashable)
newtype Vertices g v = Vertices { getVerticesInternal :: Vector v }
deriving (Functor)
newtype MVertices g s v = MVertices { getMVerticesInternal :: MVector s v }
newtype MUVertices g s v = MUVertices { getMUVerticesInternal :: MU.MVector s v }
data IntPair = IntPair !Int !Int
deriving (Eq,Ord,Show,Read,Generic)
instance Hashable IntPair
data MGraph g s e v = MGraph
{ mgraphVertexIndex :: !(HashTable s v Int)
, mgraphCurrentId :: !(MutVar s Int)
, mgraphEdges :: !(HashTable s IntPair e)
}