From 25cff5ecc164d28f4da4877bb535ca2433fc9ee4 Mon Sep 17 00:00:00 2001 From: David Roman Date: Sat, 21 Oct 2023 10:18:41 -0400 Subject: [PATCH] adding immediate ancestors and descendants --- dag.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/dag.go b/dag.go index d26d3d1..c7dca32 100644 --- a/dag.go +++ b/dag.go @@ -22,6 +22,28 @@ func (g *AcyclicGraph) DirectedGraph() Grapher { return g } +// Predecessors returns the immediate predecessors of a given vertex. +func (g *AcyclicGraph) ImmediateAncestors(me Vertex) ([]Vertex, error) { + var predecessors []Vertex + for _, edge := range g.Edges() { + if edge.Target() == me { + predecessors = append(predecessors, edge.Source()) + } + } + return predecessors, nil +} + +// Descendants returns the immediate descendants of a given vertex. +func (g *AcyclicGraph) ImmediateDescendants(me Vertex) ([]Vertex, error) { + var descendants []Vertex + for _, edge := range g.Edges() { + if edge.Source() == me { + descendants = append(descendants, edge.Target()) + } + } + return descendants, nil +} + // Returns a Set that includes every Vertex yielded by walking down from the // provided starting Vertex v. func (g *AcyclicGraph) Ancestors(v Vertex) (Set, error) {