Commit before attempting to stream room generation

This commit is contained in:
2022-07-01 12:34:31 +01:00
parent 73e3353ba9
commit c42c2115a3
+13 -8
View File
@@ -22,7 +22,7 @@ import Data.List
import Data.Graph.Inductive hiding ((&)) import Data.Graph.Inductive hiding ((&))
import Data.Set (Set) import Data.Set (Set)
import qualified Data.Set as Set import qualified Data.Set as Set
import Data.Map (Map) import Data.Map.Strict (Map)
import qualified Data.Map.Strict as M import qualified Data.Map.Strict as M
import qualified Streaming.Prelude as S import qualified Streaming.Prelude as S
import StreamingHelp import StreamingHelp
@@ -109,19 +109,24 @@ pairsToGraph :: Set.Set (Point2,Point2) -> PathGraph
pairsToGraph pairset = PathGraph gr' nodemap ncount edgemap pairsToGraph pairset = PathGraph gr' nodemap ncount edgemap
where where
(gr,nodemap,ncount) = insertNodes pairset (gr,nodemap,ncount) = insertNodes pairset
(gr',edgemap) = insertEdges toPathEdge pairset gr nodemap (gr',edgemap) = insertEdges toPathEdge gr nodemap pairset
toPathEdge :: Point2 -> Point2 -> PathEdge toPathEdge :: Point2 -> Point2 -> PathEdge
toPathEdge sp' ep = PathEdge sp' ep mempty toPathEdge sp' ep = PathEdge sp' ep mempty
insertEdges :: (Point2 -> Point2 -> b) insertEdges :: (Point2 -> Point2 -> b)
-> Set (Point2,Point2) -> Gr Point2 b -> Map Point2 Int -> Gr Point2 b -> Map Point2 Int
-> Set (Point2,Point2)
-> (Gr Point2 b, Map (V2 Point2) (Int,Int,b)) -> (Gr Point2 b, Map (V2 Point2) (Int,Int,b))
insertEdges efunc pairset gr nm = runIdentity $ S.fold_ insertedge (gr,mempty) id $ S.each pairset insertEdges efunc gr nm = runIdentity . S.fold_ (insertEdge efunc nm) (gr,mempty) id . S.each
where
insertedge (gr',em) (a,b) = (insEdge (f a,f b,efunc a b) gr' insertEdge :: Ord a => (a -> a -> c) -> Map a Int -> (Gr b c,Map (V2 a) (Int,Int,c))
, M.insert (V2 a b) (f a,f b,efunc a b) em) -> (a,a)
f a = nm M.! a -> (Gr b c,Map (V2 a) (Int,Int,c))
insertEdge efunc nm (gr',em) (a,b) = (insEdge (f a,f b,efunc a b) gr'
, M.insert (V2 a b) (f a,f b,efunc a b) em)
where
f x = nm M.! x
insertNodes :: Set (Point2,Point2) -> (Gr Point2 b, Map Point2 Int, Int) insertNodes :: Set (Point2,Point2) -> (Gr Point2 b, Map Point2 Int, Int)
insertNodes pairset = runIdentity $ S.fold_ insertnode (Data.Graph.Inductive.empty,mempty,0) id nodestream insertNodes pairset = runIdentity $ S.fold_ insertnode (Data.Graph.Inductive.empty,mempty,0) id nodestream