diff --git a/graph/graph.go b/graph/graph.go index 7c6de2e0..08370330 100644 --- a/graph/graph.go +++ b/graph/graph.go @@ -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. diff --git a/graph/multi/directed.go b/graph/multi/directed.go index 8da3cfc5..fd8637a6 100644 --- a/graph/multi/directed.go +++ b/graph/multi/directed.go @@ -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. diff --git a/graph/multi/directed_test.go b/graph/multi/directed_test.go index 487ec9a8..782e4fed 100644 --- a/graph/multi/directed_test.go +++ b/graph/multi/directed_test.go @@ -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) diff --git a/graph/multi/undirected.go b/graph/multi/undirected.go index fb2343a1..b81e17e0 100644 --- a/graph/multi/undirected.go +++ b/graph/multi/undirected.go @@ -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. diff --git a/graph/multi/undirected_test.go b/graph/multi/undirected_test.go index a3a1bfc0..94017545 100644 --- a/graph/multi/undirected_test.go +++ b/graph/multi/undirected_test.go @@ -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) diff --git a/graph/multi/weighted_directed.go b/graph/multi/weighted_directed.go index c8f86298..2cf3d1e0 100644 --- a/graph/multi/weighted_directed.go +++ b/graph/multi/weighted_directed.go @@ -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. diff --git a/graph/multi/weighted_directed_test.go b/graph/multi/weighted_directed_test.go index d4e564be..1384a7e7 100644 --- a/graph/multi/weighted_directed_test.go +++ b/graph/multi/weighted_directed_test.go @@ -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) diff --git a/graph/multi/weighted_undirected.go b/graph/multi/weighted_undirected.go index 28546c83..79941ca1 100644 --- a/graph/multi/weighted_undirected.go +++ b/graph/multi/weighted_undirected.go @@ -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. diff --git a/graph/multi/weighted_undirected_test.go b/graph/multi/weighted_undirected_test.go index df190902..afd071b8 100644 --- a/graph/multi/weighted_undirected_test.go +++ b/graph/multi/weighted_undirected_test.go @@ -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) diff --git a/graph/simple/directed.go b/graph/simple/directed.go index d2a58f31..d6843061 100644 --- a/graph/simple/directed.go +++ b/graph/simple/directed.go @@ -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. diff --git a/graph/simple/directed_test.go b/graph/simple/directed_test.go index 0de3fbd3..68099c97 100644 --- a/graph/simple/directed_test.go +++ b/graph/simple/directed_test.go @@ -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) diff --git a/graph/simple/undirected.go b/graph/simple/undirected.go index a43fcf16..2faeaf72 100644 --- a/graph/simple/undirected.go +++ b/graph/simple/undirected.go @@ -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. diff --git a/graph/simple/undirected_test.go b/graph/simple/undirected_test.go index 9251bfe7..096193f8 100644 --- a/graph/simple/undirected_test.go +++ b/graph/simple/undirected_test.go @@ -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) diff --git a/graph/simple/weighted_directed.go b/graph/simple/weighted_directed.go index 004cb852..197827d3 100644 --- a/graph/simple/weighted_directed.go +++ b/graph/simple/weighted_directed.go @@ -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. diff --git a/graph/simple/weighted_directed_test.go b/graph/simple/weighted_directed_test.go index 18c87414..a455f3f0 100644 --- a/graph/simple/weighted_directed_test.go +++ b/graph/simple/weighted_directed_test.go @@ -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) diff --git a/graph/simple/weighted_undirected.go b/graph/simple/weighted_undirected.go index 9bf02f28..d9c814b9 100644 --- a/graph/simple/weighted_undirected.go +++ b/graph/simple/weighted_undirected.go @@ -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. diff --git a/graph/simple/weighted_undirected_test.go b/graph/simple/weighted_undirected_test.go index 5111fb16..0f274aa6 100644 --- a/graph/simple/weighted_undirected_test.go +++ b/graph/simple/weighted_undirected_test.go @@ -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)