mirror of
https://github.com/gonum/gonum.git
synced 2025-10-11 01:50:12 +08:00
graph/multi: don't allocate line maps before they are needed
This commit is contained in:
@@ -53,8 +53,6 @@ func (g *DirectedGraph) AddNode(n graph.Node) {
|
|||||||
panic(fmt.Sprintf("simple: node ID collision: %d", n.ID()))
|
panic(fmt.Sprintf("simple: node ID collision: %d", n.ID()))
|
||||||
}
|
}
|
||||||
g.nodes[n.ID()] = n
|
g.nodes[n.ID()] = n
|
||||||
g.from[n.ID()] = make(map[int64]map[int64]graph.Line)
|
|
||||||
g.to[n.ID()] = make(map[int64]map[int64]graph.Line)
|
|
||||||
g.nodeIDs.Use(n.ID())
|
g.nodeIDs.Use(n.ID())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -242,20 +240,29 @@ func (g *DirectedGraph) SetLine(l graph.Line) {
|
|||||||
} else {
|
} else {
|
||||||
g.nodes[fid] = from
|
g.nodes[fid] = from
|
||||||
}
|
}
|
||||||
if g.from[fid][tid] == nil {
|
|
||||||
g.from[fid][tid] = make(map[int64]graph.Line)
|
|
||||||
}
|
|
||||||
if _, ok := g.nodes[tid]; !ok {
|
if _, ok := g.nodes[tid]; !ok {
|
||||||
g.AddNode(to)
|
g.AddNode(to)
|
||||||
} else {
|
} else {
|
||||||
g.nodes[tid] = to
|
g.nodes[tid] = to
|
||||||
}
|
}
|
||||||
if g.to[tid][fid] == nil {
|
|
||||||
g.to[tid][fid] = make(map[int64]graph.Line)
|
switch {
|
||||||
|
case g.from[fid] == nil:
|
||||||
|
g.from[fid] = map[int64]map[int64]graph.Line{tid: map[int64]graph.Line{lid: l}}
|
||||||
|
case g.from[fid][tid] == nil:
|
||||||
|
g.from[fid][tid] = map[int64]graph.Line{lid: l}
|
||||||
|
default:
|
||||||
|
g.from[fid][tid][lid] = l
|
||||||
|
}
|
||||||
|
switch {
|
||||||
|
case g.to[tid] == nil:
|
||||||
|
g.to[tid] = map[int64]map[int64]graph.Line{fid: map[int64]graph.Line{lid: l}}
|
||||||
|
case g.to[tid][fid] == nil:
|
||||||
|
g.to[tid][fid] = map[int64]graph.Line{lid: l}
|
||||||
|
default:
|
||||||
|
g.to[tid][fid][lid] = l
|
||||||
}
|
}
|
||||||
|
|
||||||
g.from[fid][tid][lid] = l
|
|
||||||
g.to[tid][fid][lid] = l
|
|
||||||
g.lineIDs.Use(lid)
|
g.lineIDs.Use(lid)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -51,7 +51,6 @@ func (g *UndirectedGraph) AddNode(n graph.Node) {
|
|||||||
panic(fmt.Sprintf("simple: node ID collision: %d", n.ID()))
|
panic(fmt.Sprintf("simple: node ID collision: %d", n.ID()))
|
||||||
}
|
}
|
||||||
g.nodes[n.ID()] = n
|
g.nodes[n.ID()] = n
|
||||||
g.lines[n.ID()] = make(map[int64]map[int64]graph.Line)
|
|
||||||
g.nodeIDs.Use(n.ID())
|
g.nodeIDs.Use(n.ID())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -242,19 +241,28 @@ func (g *UndirectedGraph) SetLine(l graph.Line) {
|
|||||||
} else {
|
} else {
|
||||||
g.nodes[fid] = from
|
g.nodes[fid] = from
|
||||||
}
|
}
|
||||||
if g.lines[fid][tid] == nil {
|
|
||||||
g.lines[fid][tid] = make(map[int64]graph.Line)
|
|
||||||
}
|
|
||||||
if _, ok := g.nodes[tid]; !ok {
|
if _, ok := g.nodes[tid]; !ok {
|
||||||
g.AddNode(to)
|
g.AddNode(to)
|
||||||
} else {
|
} else {
|
||||||
g.nodes[tid] = to
|
g.nodes[tid] = to
|
||||||
}
|
}
|
||||||
if g.lines[tid][fid] == nil {
|
|
||||||
g.lines[tid][fid] = make(map[int64]graph.Line)
|
switch {
|
||||||
|
case g.lines[fid] == nil:
|
||||||
|
g.lines[fid] = map[int64]map[int64]graph.Line{tid: map[int64]graph.Line{lid: l}}
|
||||||
|
case g.lines[fid][tid] == nil:
|
||||||
|
g.lines[fid][tid] = map[int64]graph.Line{lid: l}
|
||||||
|
default:
|
||||||
|
g.lines[fid][tid][lid] = l
|
||||||
|
}
|
||||||
|
switch {
|
||||||
|
case g.lines[tid] == nil:
|
||||||
|
g.lines[tid] = map[int64]map[int64]graph.Line{fid: map[int64]graph.Line{lid: l}}
|
||||||
|
case g.lines[tid][fid] == nil:
|
||||||
|
g.lines[tid][fid] = map[int64]graph.Line{lid: l}
|
||||||
|
default:
|
||||||
|
g.lines[tid][fid][lid] = l
|
||||||
}
|
}
|
||||||
|
|
||||||
g.lines[fid][tid][lid] = l
|
|
||||||
g.lines[tid][fid][lid] = l
|
|
||||||
g.lineIDs.Use(lid)
|
g.lineIDs.Use(lid)
|
||||||
}
|
}
|
||||||
|
@@ -62,8 +62,6 @@ func (g *WeightedDirectedGraph) AddNode(n graph.Node) {
|
|||||||
panic(fmt.Sprintf("simple: node ID collision: %d", n.ID()))
|
panic(fmt.Sprintf("simple: node ID collision: %d", n.ID()))
|
||||||
}
|
}
|
||||||
g.nodes[n.ID()] = n
|
g.nodes[n.ID()] = n
|
||||||
g.from[n.ID()] = make(map[int64]map[int64]graph.WeightedLine)
|
|
||||||
g.to[n.ID()] = make(map[int64]map[int64]graph.WeightedLine)
|
|
||||||
g.nodeIDs.Use(n.ID())
|
g.nodeIDs.Use(n.ID())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -251,20 +249,29 @@ func (g *WeightedDirectedGraph) SetWeightedLine(l graph.WeightedLine) {
|
|||||||
} else {
|
} else {
|
||||||
g.nodes[fid] = from
|
g.nodes[fid] = from
|
||||||
}
|
}
|
||||||
if g.from[fid][tid] == nil {
|
|
||||||
g.from[fid][tid] = make(map[int64]graph.WeightedLine)
|
|
||||||
}
|
|
||||||
if _, ok := g.nodes[tid]; !ok {
|
if _, ok := g.nodes[tid]; !ok {
|
||||||
g.AddNode(to)
|
g.AddNode(to)
|
||||||
} else {
|
} else {
|
||||||
g.nodes[tid] = to
|
g.nodes[tid] = to
|
||||||
}
|
}
|
||||||
if g.to[tid][fid] == nil {
|
|
||||||
g.to[tid][fid] = make(map[int64]graph.WeightedLine)
|
switch {
|
||||||
|
case g.from[fid] == nil:
|
||||||
|
g.from[fid] = map[int64]map[int64]graph.WeightedLine{tid: map[int64]graph.WeightedLine{lid: l}}
|
||||||
|
case g.from[fid][tid] == nil:
|
||||||
|
g.from[fid][tid] = map[int64]graph.WeightedLine{lid: l}
|
||||||
|
default:
|
||||||
|
g.from[fid][tid][lid] = l
|
||||||
|
}
|
||||||
|
switch {
|
||||||
|
case g.to[tid] == nil:
|
||||||
|
g.to[tid] = map[int64]map[int64]graph.WeightedLine{fid: map[int64]graph.WeightedLine{lid: l}}
|
||||||
|
case g.to[tid][fid] == nil:
|
||||||
|
g.to[tid][fid] = map[int64]graph.WeightedLine{lid: l}
|
||||||
|
default:
|
||||||
|
g.to[tid][fid][lid] = l
|
||||||
}
|
}
|
||||||
|
|
||||||
g.from[fid][tid][lid] = l
|
|
||||||
g.to[tid][fid][lid] = l
|
|
||||||
g.lineIDs.Use(l.ID())
|
g.lineIDs.Use(l.ID())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -60,7 +60,6 @@ func (g *WeightedUndirectedGraph) AddNode(n graph.Node) {
|
|||||||
panic(fmt.Sprintf("simple: node ID collision: %d", n.ID()))
|
panic(fmt.Sprintf("simple: node ID collision: %d", n.ID()))
|
||||||
}
|
}
|
||||||
g.nodes[n.ID()] = n
|
g.nodes[n.ID()] = n
|
||||||
g.lines[n.ID()] = make(map[int64]map[int64]graph.WeightedLine)
|
|
||||||
g.nodeIDs.Use(n.ID())
|
g.nodeIDs.Use(n.ID())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,20 +251,29 @@ func (g *WeightedUndirectedGraph) SetWeightedLine(l graph.WeightedLine) {
|
|||||||
} else {
|
} else {
|
||||||
g.nodes[fid] = from
|
g.nodes[fid] = from
|
||||||
}
|
}
|
||||||
if g.lines[fid][tid] == nil {
|
|
||||||
g.lines[fid][tid] = make(map[int64]graph.WeightedLine)
|
|
||||||
}
|
|
||||||
if _, ok := g.nodes[tid]; !ok {
|
if _, ok := g.nodes[tid]; !ok {
|
||||||
g.AddNode(to)
|
g.AddNode(to)
|
||||||
} else {
|
} else {
|
||||||
g.nodes[tid] = to
|
g.nodes[tid] = to
|
||||||
}
|
}
|
||||||
if g.lines[tid][fid] == nil {
|
|
||||||
g.lines[tid][fid] = make(map[int64]graph.WeightedLine)
|
switch {
|
||||||
|
case g.lines[fid] == nil:
|
||||||
|
g.lines[fid] = map[int64]map[int64]graph.WeightedLine{tid: map[int64]graph.WeightedLine{lid: l}}
|
||||||
|
case g.lines[fid][tid] == nil:
|
||||||
|
g.lines[fid][tid] = map[int64]graph.WeightedLine{lid: l}
|
||||||
|
default:
|
||||||
|
g.lines[fid][tid][lid] = l
|
||||||
|
}
|
||||||
|
switch {
|
||||||
|
case g.lines[tid] == nil:
|
||||||
|
g.lines[tid] = map[int64]map[int64]graph.WeightedLine{fid: map[int64]graph.WeightedLine{lid: l}}
|
||||||
|
case g.lines[tid][fid] == nil:
|
||||||
|
g.lines[tid][fid] = map[int64]graph.WeightedLine{lid: l}
|
||||||
|
default:
|
||||||
|
g.lines[tid][fid][lid] = l
|
||||||
}
|
}
|
||||||
|
|
||||||
g.lines[fid][tid][lid] = l
|
|
||||||
g.lines[tid][fid][lid] = l
|
|
||||||
g.lineIDs.Use(lid)
|
g.lineIDs.Use(lid)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user