module Gis.Saga.Node (getAllRoutes)
where
import qualified Data.Map as M
import Gis.Saga.Types
findEdges :: NodeMap -> [((String,String),[String])]
findEdges nds =
[((fromNme,toNme),[o]) | (fromNme, (_, fromOuts)) <- M.toList nds
, (toNme, (toIns, _)) <- M.toList nds
, o <- fromOuts
, i <- toIns
, o == i
]
getAllRoutes :: NodeMap -> [((String,String),[String])]
getAllRoutes = concat . findRoutes . findEdges
findRoutes :: [((String,String),[String])] -> [[((String,String),[String])]]
findRoutes [] = []
findRoutes edgs = edgs : edgs' : findRoutes edgs'
where
edgs' = chainEdges edgs
chainEdges :: [((String,String),[String])] -> [((String,String),[String])]
chainEdges edges =
[((srcF,dstT), srcCmds ++ dstCmds) | ((srcF,srcT),srcCmds) <- edges
, ((dstF,dstT),dstCmds) <- edges
, srcT == dstF
]