MCPcopy Create free account
hub / github.com/DoNewsCode/core / AddEdges

Method AddEdges

dag/dag.go:63–85  ·  view source on GitHub ↗

AddEdges adds multiple edges in one batch. See AddEdge for more details.

(edges Edges)

Source from the content-addressed store, hash-verified

61
62// AddEdges adds multiple edges in one batch. See AddEdge for more details.
63func (d *DAG) AddEdges(edges Edges) error {
64 for _, edge := range edges {
65 for i := 0; i < len(edge); i++ {
66 if len(d.vertexes) <= int(edge[i]) || edge[i] < 0 {
67 return errors.Errorf("invalid vertex id %d", edge[i])
68 }
69 }
70 }
71 for _, edge := range edges {
72 for i := 0; i < len(edge)-1; i++ {
73 d.vertexes[edge[i]].addChild(d.vertexes[edge[i+1]])
74 }
75 }
76 if yes, badEdges := IsAcyclic(d); !yes {
77 for _, edge := range edges {
78 for i := 0; i < len(edge)-1; i++ {
79 d.vertexes[edge[i]].removeChild(d.vertexes[edge[i+1]])
80 }
81 }
82 return errors.Errorf("dag is not acyclic: %s", d.fmtEdges(badEdges))
83 }
84 return nil
85}
86
87// Run runs the dag. Vertexes with no dependency will be scheduled concurrently
88// while the inked vertexes will be scheduled sequentially. The Scheduler

Callers 1

TestDag_addEdgesFunction · 0.80

Calls 4

fmtEdgesMethod · 0.95
IsAcyclicFunction · 0.85
addChildMethod · 0.80
removeChildMethod · 0.80

Tested by 1

TestDag_addEdgesFunction · 0.64