graph: add Empty universal iterator for empty returns

This commit is contained in:
Dan Kortschak
2018-12-13 07:56:04 +10:30
parent fd50e23eae
commit 14c7f9569f
29 changed files with 362 additions and 140 deletions

View File

@@ -95,13 +95,16 @@ func (g *UndirectedMatrix) Edges() graph.Edges {
}
}
}
if len(edges) == 0 {
return graph.Empty
}
return iterator.NewOrderedEdges(edges)
}
// From returns all nodes in g that can be reached directly from n.
func (g *UndirectedMatrix) From(id int64) graph.Nodes {
if !g.has(id) {
return nil
return graph.Empty
}
var nodes []graph.Node
r := g.mat.Symmetric()
@@ -114,6 +117,9 @@ func (g *UndirectedMatrix) From(id int64) graph.Nodes {
nodes = append(nodes, g.Node(int64(i)))
}
}
if len(nodes) == 0 {
return graph.Empty
}
return iterator.NewOrderedNodes(nodes)
}
@@ -156,6 +162,7 @@ func (g *UndirectedMatrix) Nodes() graph.Nodes {
return iterator.NewOrderedNodes(nodes)
}
r := g.mat.Symmetric()
// Matrix graphs must have at least one node.
return iterator.NewImplicitNodes(0, r, newSimpleNode)
}
@@ -249,6 +256,9 @@ func (g *UndirectedMatrix) WeightedEdges() graph.WeightedEdges {
}
}
}
if len(edges) == 0 {
return graph.Empty
}
return iterator.NewOrderedWeightedEdges(edges)
}