Refactor BZgraflow: extract graph structure building into a separate method and enhance cross-layer link detection

This commit is contained in:
STEINNI
2026-01-18 18:06:40 +00:00
parent 19b8df4933
commit 0563bdd9ee

View File

@@ -207,19 +207,7 @@ class BZgraflow extends Buildoz{
linksWithoutBackEdges = this.flow.links
}
const parents = {}
const adj = {}
this.flow.nodes.forEach(n => {
parents[n.id] = []
adj[n.id] = []
})
linksWithoutBackEdges.forEach(link => {
const from = link.from[0]
const to = link.to[0]
parents[to].push(from)
adj[from].push(to)
})
const { parents, adj } = this.buildGraphStructures(this.flow.nodes, linksWithoutBackEdges)
const layers = this.computeLayers(this.flow.nodes, parents)
let maxHeight = 0; let maxWidth = 0
@@ -366,6 +354,24 @@ class BZgraflow extends Buildoz{
return(this.flow.links.find(item => ((item.from[0]==nid1) && (item.to[0]==nid2))))
}
buildGraphStructures(nodes, links) {
const parents = {}
const adj = {}
nodes.forEach(n => {
parents[n.id] = []
adj[n.id] = []
})
links.forEach(link => {
const from = link.from[0]
const to = link.to[0]
parents[to].push(from)
adj[from].push(to)
})
return { parents, adj }
}
computeLayers(nodes, parents) {
const layer = {}
const dfs = (id) => {
@@ -453,6 +459,19 @@ class BZgraflow extends Buildoz{
return backEdges
}
findCrossLayerLinks(links) {
const { parents } = this.buildGraphStructures(this.flow.nodes, links)
const layers = this.computeLayers(this.flow.nodes, parents)
const crossLayerLinks = []
for(const link of links){
const from = link.from[0]
const to = link.to[0]
if(layers[from] !== layers[to]) {
crossLayerLinks.push(link)
}
}
return crossLayerLinks
}
}
Buildoz.define('graflow', BZgraflow)