graph: use int64 for node removal

This commit is contained in:
Dan Kortschak
2018-03-25 10:16:12 +10:30
committed by Dan Kortschak
parent 22ecbbb4f5
commit a1b5d898fe
17 changed files with 105 additions and 104 deletions

View File

@@ -129,10 +129,11 @@ type NodeAdder interface {
// NodeRemover is an interface for removing nodes from a graph.
type NodeRemover interface {
// RemoveNode removes a node from the graph, as
// well as any edges attached to it. If the node
// is not in the graph it is a no-op.
RemoveNode(Node)
// RemoveNode removes the node with the given ID
// from the graph, as well as any edges attached
// to it. If the node is not in the graph it is
// a no-op.
RemoveNode(id int64)
}
// EdgeAdder is an interface for adding edges to a graph.

View File

@@ -65,25 +65,25 @@ func (g *DirectedGraph) AddNode(n graph.Node) {
g.nodeIDs.Use(n.ID())
}
// RemoveNode removes n from the graph, as well as any edges attached to it. If the node
// is not in the graph it is a no-op.
func (g *DirectedGraph) RemoveNode(n graph.Node) {
if _, ok := g.nodes[n.ID()]; !ok {
// RemoveNode removes the node with the given ID from the graph, as well as any edges attached
// to it. If the node is not in the graph it is a no-op.
func (g *DirectedGraph) RemoveNode(id int64) {
if _, ok := g.nodes[id]; !ok {
return
}
delete(g.nodes, n.ID())
delete(g.nodes, id)
for from := range g.from[n.ID()] {
delete(g.to[from], n.ID())
for from := range g.from[id] {
delete(g.to[from], id)
}
delete(g.from, n.ID())
delete(g.from, id)
for to := range g.to[n.ID()] {
delete(g.from[to], n.ID())
for to := range g.to[id] {
delete(g.from[to], id)
}
delete(g.to, n.ID())
delete(g.to, id)
g.nodeIDs.Release(n.ID())
g.nodeIDs.Release(id)
}
// NewLine returns a new Line from the source to the destination node.

View File

@@ -58,7 +58,7 @@ func TestIssue123DirectedGraph(t *testing.T) {
n1 := g.NewNode()
g.AddNode(n1)
g.RemoveNode(n0)
g.RemoveNode(n0.ID())
n2 := g.NewNode()
g.AddNode(n2)

View File

@@ -62,20 +62,20 @@ func (g *UndirectedGraph) AddNode(n graph.Node) {
g.nodeIDs.Use(n.ID())
}
// RemoveNode removes n from the graph, as well as any edges attached to it. If the node
// is not in the graph it is a no-op.
func (g *UndirectedGraph) RemoveNode(n graph.Node) {
if _, ok := g.nodes[n.ID()]; !ok {
// RemoveNode removes the node with the given ID from the graph, as well as any edges attached
// to it. If the node is not in the graph it is a no-op.
func (g *UndirectedGraph) RemoveNode(id int64) {
if _, ok := g.nodes[id]; !ok {
return
}
delete(g.nodes, n.ID())
delete(g.nodes, id)
for from := range g.lines[n.ID()] {
delete(g.lines[from], n.ID())
for from := range g.lines[id] {
delete(g.lines[from], id)
}
delete(g.lines, n.ID())
delete(g.lines, id)
g.nodeIDs.Release(n.ID())
g.nodeIDs.Release(id)
}
// NewLine returns a new Line from the source to the destination node.

View File

@@ -24,9 +24,9 @@ func TestMaxID(t *testing.T) {
g.AddNode(i)
nodes[i] = struct{}{}
}
g.RemoveNode(Node(0))
g.RemoveNode(int64(0))
delete(nodes, Node(0))
g.RemoveNode(Node(2))
g.RemoveNode(int64(2))
delete(nodes, Node(2))
n := g.NewNode()
g.AddNode(n)
@@ -53,7 +53,7 @@ func TestIssue123UndirectedGraph(t *testing.T) {
n1 := g.NewNode()
g.AddNode(n1)
g.RemoveNode(n0)
g.RemoveNode(n0.ID())
n2 := g.NewNode()
g.AddNode(n2)

View File

@@ -69,25 +69,25 @@ func (g *WeightedDirectedGraph) AddNode(n graph.Node) {
g.nodeIDs.Use(n.ID())
}
// RemoveNode removes n from the graph, as well as any edges attached to it. If the node
// is not in the graph it is a no-op.
func (g *WeightedDirectedGraph) RemoveNode(n graph.Node) {
if _, ok := g.nodes[n.ID()]; !ok {
// RemoveNode removes the node with the given ID from the graph, as well as any edges attached
// to it. If the node is not in the graph it is a no-op.
func (g *WeightedDirectedGraph) RemoveNode(id int64) {
if _, ok := g.nodes[id]; !ok {
return
}
delete(g.nodes, n.ID())
delete(g.nodes, id)
for from := range g.from[n.ID()] {
delete(g.to[from], n.ID())
for from := range g.from[id] {
delete(g.to[from], id)
}
delete(g.from, n.ID())
delete(g.from, id)
for to := range g.to[n.ID()] {
delete(g.from[to], n.ID())
for to := range g.to[id] {
delete(g.from[to], id)
}
delete(g.to, n.ID())
delete(g.to, id)
g.nodeIDs.Release(n.ID())
g.nodeIDs.Release(id)
}
// NewWeightedLine returns a new WeightedLine from the source to the destination node.

View File

@@ -59,7 +59,7 @@ func TestIssue123WeightedDirectedGraph(t *testing.T) {
n1 := g.NewNode()
g.AddNode(n1)
g.RemoveNode(n0)
g.RemoveNode(n0.ID())
n2 := g.NewNode()
g.AddNode(n2)

View File

@@ -66,20 +66,20 @@ func (g *WeightedUndirectedGraph) AddNode(n graph.Node) {
g.nodeIDs.Use(n.ID())
}
// RemoveNode removes n from the graph, as well as any edges attached to it. If the node
// is not in the graph it is a no-op.
func (g *WeightedUndirectedGraph) RemoveNode(n graph.Node) {
if _, ok := g.nodes[n.ID()]; !ok {
// RemoveNode removes the node with the given ID from the graph, as well as any edges attached
// to it. If the node is not in the graph it is a no-op.
func (g *WeightedUndirectedGraph) RemoveNode(id int64) {
if _, ok := g.nodes[id]; !ok {
return
}
delete(g.nodes, n.ID())
delete(g.nodes, id)
for from := range g.lines[n.ID()] {
delete(g.lines[from], n.ID())
for from := range g.lines[id] {
delete(g.lines[from], id)
}
delete(g.lines, n.ID())
delete(g.lines, id)
g.nodeIDs.Release(n.ID())
g.nodeIDs.Release(id)
}
// NewLine returns a new WeightedLine from the source to the destination node.

View File

@@ -17,9 +17,9 @@ func TestWeightedMaxID(t *testing.T) {
g.AddNode(i)
nodes[i] = struct{}{}
}
g.RemoveNode(Node(0))
g.RemoveNode(int64(0))
delete(nodes, Node(0))
g.RemoveNode(Node(2))
g.RemoveNode(int64(2))
delete(nodes, Node(2))
n := g.NewNode()
g.AddNode(n)
@@ -46,7 +46,7 @@ func TestIssue123WeightedUndirectedGraph(t *testing.T) {
n1 := g.NewNode()
g.AddNode(n1)
g.RemoveNode(n0)
g.RemoveNode(n0.ID())
n2 := g.NewNode()
g.AddNode(n2)

View File

@@ -54,25 +54,25 @@ func (g *DirectedGraph) AddNode(n graph.Node) {
g.nodeIDs.Use(n.ID())
}
// RemoveNode removes n from the graph, as well as any edges attached to it. If the node
// is not in the graph it is a no-op.
func (g *DirectedGraph) RemoveNode(n graph.Node) {
if _, ok := g.nodes[n.ID()]; !ok {
// RemoveNode removes the node with the given ID from the graph, as well as any edges attached
// to it. If the node is not in the graph it is a no-op.
func (g *DirectedGraph) RemoveNode(id int64) {
if _, ok := g.nodes[id]; !ok {
return
}
delete(g.nodes, n.ID())
delete(g.nodes, id)
for from := range g.from[n.ID()] {
delete(g.to[from], n.ID())
for from := range g.from[id] {
delete(g.to[from], id)
}
delete(g.from, n.ID())
delete(g.from, id)
for to := range g.to[n.ID()] {
delete(g.from[to], n.ID())
for to := range g.to[id] {
delete(g.from[to], id)
}
delete(g.to, n.ID())
delete(g.to, id)
g.nodeIDs.Release(n.ID())
g.nodeIDs.Release(id)
}
// NewEdge returns a new Edge from the source to the destination node.

View File

@@ -58,7 +58,7 @@ func TestIssue123DirectedGraph(t *testing.T) {
n1 := g.NewNode()
g.AddNode(n1)
g.RemoveNode(n0)
g.RemoveNode(n0.ID())
n2 := g.NewNode()
g.AddNode(n2)

View File

@@ -51,20 +51,20 @@ func (g *UndirectedGraph) AddNode(n graph.Node) {
g.nodeIDs.Use(n.ID())
}
// RemoveNode removes n from the graph, as well as any edges attached to it. If the node
// is not in the graph it is a no-op.
func (g *UndirectedGraph) RemoveNode(n graph.Node) {
if _, ok := g.nodes[n.ID()]; !ok {
// RemoveNode removes the node with the given ID from the graph, as well as any edges attached
// to it. If the node is not in the graph it is a no-op.
func (g *UndirectedGraph) RemoveNode(id int64) {
if _, ok := g.nodes[id]; !ok {
return
}
delete(g.nodes, n.ID())
delete(g.nodes, id)
for from := range g.edges[n.ID()] {
delete(g.edges[from], n.ID())
for from := range g.edges[id] {
delete(g.edges[from], id)
}
delete(g.edges, n.ID())
delete(g.edges, id)
g.nodeIDs.Release(n.ID())
g.nodeIDs.Release(id)
}
// NewEdge returns a new Edge from the source to the destination node.

View File

@@ -31,9 +31,9 @@ func TestMaxID(t *testing.T) {
g.AddNode(i)
nodes[i] = struct{}{}
}
g.RemoveNode(Node(0))
g.RemoveNode(int64(0))
delete(nodes, Node(0))
g.RemoveNode(Node(2))
g.RemoveNode(int64(2))
delete(nodes, Node(2))
n := g.NewNode()
g.AddNode(n)
@@ -60,7 +60,7 @@ func TestIssue123UndirectedGraph(t *testing.T) {
n1 := g.NewNode()
g.AddNode(n1)
g.RemoveNode(n0)
g.RemoveNode(n0.ID())
n2 := g.NewNode()
g.AddNode(n2)

View File

@@ -60,25 +60,25 @@ func (g *WeightedDirectedGraph) AddNode(n graph.Node) {
g.nodeIDs.Use(n.ID())
}
// RemoveNode removes n from the graph, as well as any edges attached to it. If the node
// is not in the graph it is a no-op.
func (g *WeightedDirectedGraph) RemoveNode(n graph.Node) {
if _, ok := g.nodes[n.ID()]; !ok {
// RemoveNode removes the node with the given ID from the graph, as well as any edges attached
// to it. If the node is not in the graph it is a no-op.
func (g *WeightedDirectedGraph) RemoveNode(id int64) {
if _, ok := g.nodes[id]; !ok {
return
}
delete(g.nodes, n.ID())
delete(g.nodes, id)
for from := range g.from[n.ID()] {
delete(g.to[from], n.ID())
for from := range g.from[id] {
delete(g.to[from], id)
}
delete(g.from, n.ID())
delete(g.from, id)
for to := range g.to[n.ID()] {
delete(g.from[to], n.ID())
for to := range g.to[id] {
delete(g.from[to], id)
}
delete(g.to, n.ID())
delete(g.to, id)
g.nodeIDs.Release(n.ID())
g.nodeIDs.Release(id)
}
// NewWeightedEdge returns a new weighted edge from the source to the destination node.

View File

@@ -60,7 +60,7 @@ func TestIssue123WeightedDirectedGraph(t *testing.T) {
n1 := g.NewNode()
g.AddNode(n1)
g.RemoveNode(n0)
g.RemoveNode(n0.ID())
n2 := g.NewNode()
g.AddNode(n2)

View File

@@ -57,20 +57,20 @@ func (g *WeightedUndirectedGraph) AddNode(n graph.Node) {
g.nodeIDs.Use(n.ID())
}
// RemoveNode removes n from the graph, as well as any edges attached to it. If the node
// is not in the graph it is a no-op.
func (g *WeightedUndirectedGraph) RemoveNode(n graph.Node) {
if _, ok := g.nodes[n.ID()]; !ok {
// RemoveNode removes the node with the given ID from the graph, as well as any edges attached
// to it. If the node is not in the graph it is a no-op.
func (g *WeightedUndirectedGraph) RemoveNode(id int64) {
if _, ok := g.nodes[id]; !ok {
return
}
delete(g.nodes, n.ID())
delete(g.nodes, id)
for from := range g.edges[n.ID()] {
delete(g.edges[from], n.ID())
for from := range g.edges[id] {
delete(g.edges[from], id)
}
delete(g.edges, n.ID())
delete(g.edges, id)
g.nodeIDs.Release(n.ID())
g.nodeIDs.Release(id)
}
// NewWeightedEdge returns a new weighted edge from the source to the destination node.

View File

@@ -33,9 +33,9 @@ func TestWeightedMaxID(t *testing.T) {
g.AddNode(i)
nodes[i] = struct{}{}
}
g.RemoveNode(Node(0))
g.RemoveNode(int64(0))
delete(nodes, Node(0))
g.RemoveNode(Node(2))
g.RemoveNode(int64(2))
delete(nodes, Node(2))
n := g.NewNode()
g.AddNode(n)
@@ -62,7 +62,7 @@ func TestIssue123WeightedUndirectedGraph(t *testing.T) {
n1 := g.NewNode()
g.AddNode(n1)
g.RemoveNode(n0)
g.RemoveNode(n0.ID())
n2 := g.NewNode()
g.AddNode(n2)