Documentation ¶
Index ¶
- func StronglyConnected(g *Graph) [][]Vertex
- func VertexName(raw Vertex) string
- type AcyclicGraph
- type Edge
- type Graph
- func (g *Graph) Add(v Vertex) Vertex
- func (g *Graph) Connect(edge Edge)
- func (g *Graph) DownEdges(v Vertex) *Set
- func (g *Graph) Edges() []Edge
- func (g *Graph) Remove(v Vertex) Vertex
- func (g *Graph) RemoveEdge(edge Edge)
- func (g *Graph) Replace(original, replacement Vertex) bool
- func (g *Graph) String() string
- func (g *Graph) UpEdges(v Vertex) *Set
- func (g *Graph) Vertices() []Vertex
- type Hashable
- type NamedVertex
- type Set
- type Vertex
- type WalkFunc
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func StronglyConnected ¶
StronglyConnected returns the list of strongly connected components within the Graph g. This information is primarily used by this package for cycle detection, but strongly connected components have widespread use.
Types ¶
type AcyclicGraph ¶
type AcyclicGraph struct {
Graph
}
AcyclicGraph is a specialization of Graph that cannot have cycles. With this property, we get the property of sane graph traversal.
func (*AcyclicGraph) Ancestors ¶
func (g *AcyclicGraph) Ancestors(v Vertex) (*Set, error)
Returns a Set that includes every Vertex yielded by walking down from the provided starting Vertex v.
func (*AcyclicGraph) Descendents ¶
func (g *AcyclicGraph) Descendents(v Vertex) (*Set, error)
Returns a Set that includes every Vertex yielded by walking up from the provided starting Vertex v.
func (*AcyclicGraph) Root ¶
func (g *AcyclicGraph) Root() (Vertex, error)
Root returns the root of the DAG, or an error.
Complexity: O(V)
func (*AcyclicGraph) TransitiveReduction ¶
func (g *AcyclicGraph) TransitiveReduction()
TransitiveReduction performs the transitive reduction of graph g in place. The transitive reduction of a graph is a graph with as few edges as possible with the same reachability as the original graph. This means that if there are three nodes A => B => C, and A connects to both B and C, and B connects to C, then the transitive reduction is the same graph with only a single edge between A and B, and a single edge between B and C.
The graph must be valid for this operation to behave properly. If Validate() returns an error, the behavior is undefined and the results will likely be unexpected.
Complexity: O(V(V+E)), or asymptotically O(VE)
func (*AcyclicGraph) Validate ¶
func (g *AcyclicGraph) Validate() error
Validate validates the DAG. A DAG is valid if it has a single root with no cycles.
func (*AcyclicGraph) Walk ¶
func (g *AcyclicGraph) Walk(cb WalkFunc) error
Walk walks the graph, calling your callback as each node is visited. This will walk nodes in parallel if it can. Because the walk is done in parallel, the error returned will be a multierror.
type Graph ¶
type Graph struct {
// contains filtered or unexported fields
}
Graph is used to represent a dependency graph.
func (*Graph) Add ¶
Add adds a vertex to the graph. This is safe to call multiple time with the same Vertex.
func (*Graph) Connect ¶
Connect adds an edge with the given source and target. This is safe to call multiple times with the same value. Note that the same value is verified through pointer equality of the vertices, not through the value of the edge itself.
func (*Graph) Remove ¶
Remove removes a vertex from the graph. This will also remove any edges with this vertex as a source or target.
func (*Graph) RemoveEdge ¶
RemoveEdge removes an edge from the graph.
func (*Graph) Replace ¶
Replace replaces the original Vertex with replacement. If the original does not exist within the graph, then false is returned. Otherwise, true is returned.
type Hashable ¶
type Hashable interface {
Hashcode() interface{}
}
Hashable is the interface used by set to get the hash code of a value. If this isn't given, then the value of the item being added to the set itself is used as the comparison value.
type NamedVertex ¶
NamedVertex is an optional interface that can be implemented by Vertex to give it a human-friendly name that is used for outputting the graph.