Simplify removeUnnecessaryStructuralNodes
This commit is contained in:
parent
e5fdec970a
commit
95c0cc2e4b
|
@ -295,19 +295,19 @@ removeUnnecessaryStructuralNodes (nodes, edges, mapping, association) =
|
||||||
regularEdges = filter isRegularEdge edges
|
regularEdges = filter isRegularEdge edges
|
||||||
inDegree = counter $ map (\(from,to,_) -> from) regularEdges
|
inDegree = counter $ map (\(from,to,_) -> from) regularEdges
|
||||||
outDegree = counter $ map (\(from,to,_) -> to) regularEdges
|
outDegree = counter $ map (\(from,to,_) -> to) regularEdges
|
||||||
structuralNodes = S.fromList $ map fst $ filter isStructural nodes
|
structuralNodes = S.fromList [node | (node, CFStructuralNode) <- nodes]
|
||||||
candidateNodes = S.filter isLinear structuralNodes
|
candidateNodes = S.filter isLinear structuralNodes
|
||||||
edgesToCollapse = S.fromList $ filter filterEdges regularEdges
|
edgesToCollapse = S.fromList $ filter filterEdges regularEdges
|
||||||
|
|
||||||
remapping :: M.Map Node Node
|
remapping :: M.Map Node Node
|
||||||
remapping = foldl' (\m (old, new) -> M.insert old new m) M.empty $ map orderEdge $ S.toList edgesToCollapse
|
remapping = M.fromList $ map orderEdge $ S.toList edgesToCollapse
|
||||||
recursiveRemapping = M.fromList $ map (\c -> (c, recursiveLookup remapping c)) $ M.keys remapping
|
recursiveRemapping = M.mapWithKey (\c _ -> recursiveLookup remapping c) remapping
|
||||||
|
|
||||||
filterEdges (a,b,_) =
|
filterEdges (a,b,_) =
|
||||||
a `S.member` candidateNodes && b `S.member` candidateNodes
|
a `S.member` candidateNodes && b `S.member` candidateNodes
|
||||||
|
|
||||||
orderEdge (a,b,_) = if a < b then (b,a) else (a,b)
|
orderEdge (a,b,_) = if a < b then (b,a) else (a,b)
|
||||||
counter = foldl' (\map key -> M.insertWith (+) key 1 map) M.empty
|
counter = M.fromListWith (+) . map (\key -> (key, 1))
|
||||||
isRegularEdge (_, _, CFEFlow) = True
|
isRegularEdge (_, _, CFEFlow) = True
|
||||||
isRegularEdge _ = False
|
isRegularEdge _ = False
|
||||||
|
|
||||||
|
@ -317,11 +317,6 @@ removeUnnecessaryStructuralNodes (nodes, edges, mapping, association) =
|
||||||
Nothing -> node
|
Nothing -> node
|
||||||
Just x -> recursiveLookup map x
|
Just x -> recursiveLookup map x
|
||||||
|
|
||||||
isStructural (node, label) =
|
|
||||||
case label of
|
|
||||||
CFStructuralNode -> True
|
|
||||||
_ -> False
|
|
||||||
|
|
||||||
isLinear node =
|
isLinear node =
|
||||||
M.findWithDefault 0 node inDegree == 1
|
M.findWithDefault 0 node inDegree == 1
|
||||||
&& M.findWithDefault 0 node outDegree == 1
|
&& M.findWithDefault 0 node outDegree == 1
|
||||||
|
|
Loading…
Reference in New Issue