Documentation ¶
Index ¶
- Variables
- func AddReversedEdge(g Interface, head, tail graph.Node, edgeKind string) bool
- func AllNodes(g Interface, node graph.Node) bool
- func EnsureUnique(g UniqueNodeInitializer, name UniqueName, fn NodeInitializerFunc) graph.Node
- func ExistingDirectEdge(g Interface, head, tail graph.Node, edgeKind string) bool
- func Fprint(out io.Writer, g Graph)
- func GetContainingNode(g Graph, containedNode graph.Node) graph.Node
- func GetTopLevelContainerNode(g Graph, containedNode graph.Node) graph.Node
- func NodesByKind(g Interface, nodes []graph.Node, kinds ...string) [][]graph.Node
- func ReverseExistingDirectEdge(g Interface, head, tail graph.Node, edgeKind string) bool
- func ReverseGraphEdge(g Interface, head, tail graph.Node, edgeKind string) bool
- type Edge
- type EdgeFunc
- type Graph
- func (g Graph) AddEdge(head, tail graph.Node, edgeKind string)
- func (g Graph) AddNode(n graph.Node)
- func (g Graph) ConnectedEdgeSubgraph(fn EdgeFunc) Graph
- func (g Graph) EdgeList() []graph.Edge
- func (g Graph) EdgeSubgraph(edgeFn EdgeFunc) Graph
- func (g Graph) Find(name UniqueName) graph.Node
- func (g Graph) FindOrCreate(name UniqueName, fn NodeInitializerFunc) (graph.Node, bool)
- func (g Graph) InboundEdges(node graph.Node, edgeKinds ...string) []graph.Edge
- func (g Graph) OutboundEdges(node graph.Node, edgeKinds ...string) []graph.Edge
- func (g Graph) PredecessorEdges(node graph.Node, fn EdgeFunc, edgeKind ...string)
- func (g Graph) RootNodes() []graph.Node
- func (g Graph) String() string
- func (g Graph) Subgraph(nodeFn NodeFunc, edgeFn EdgeFunc) Graph
- func (g Graph) SubgraphWithNodes(nodes []graph.Node, fn EdgeFunc) Graph
- func (g Graph) SuccessorEdges(node graph.Node, fn EdgeFunc, edgeKind ...string)
- type GraphDescriber
- type Interface
- type MutableDirectedEdge
- type MutableUniqueGraph
- type Node
- type NodeFinder
- type NodeFunc
- type NodeInitializerFunc
- type NodeSet
- type SortedNodeList
- type UniqueName
- type UniqueNameFunc
- type UniqueNodeInitializer
Constants ¶
This section is empty.
Variables ¶
var ( UnknownEdgeKind = "UnknownEdge" // ReferencedByEdgeKind is the kind to use if you're building reverse links that don't have a specific edge in the other direction // other uses are discouraged. You should create a kind for your edge ReferencedByEdgeKind = "ReferencedBy" // ContainsEdgeKind is the kind to use if one node's contents logically contain another node's contents. A given node can only have // a single inbound Contais edge. The code does not prevent contains cycles, but that's insane, don't do that. ContainsEdgeKind = "Contains" )
var (
UnknownNodeKind = "UnknownNode"
)
Functions ¶
func AddReversedEdge ¶
AddReversedEdge adds a reversed edge for every passed edge and preserves the existing edge. Used to convert a one directional edge into a bidirectional edge, but will create duplicate edges if a bidirectional edge between two nodes already exists.
func EnsureUnique ¶
func EnsureUnique(g UniqueNodeInitializer, name UniqueName, fn NodeInitializerFunc) graph.Node
func ExistingDirectEdge ¶
ExistingDirectEdge returns true if both head and tail already exist in the graph and the edge kind is not ReferencedByEdgeKind (the generic reverse edge kind). This will purge the graph of any edges created by AddReversedEdge.
func GetContainingNode ¶ added in v1.0.1
GetContainingNode returns the direct predecessor that is linked to the node by a ContainsEdgeKind. It returns nil if no container is found.
func GetTopLevelContainerNode ¶ added in v1.0.1
GetTopLevelContainerNode traverses the reverse ContainsEdgeKind edges until it finds a node that does not have an inbound ContainsEdgeKind edge. This could be the node itself
func NodesByKind ¶
func ReverseExistingDirectEdge ¶
ReverseExistingDirectEdge reverses the order of the edge and drops the existing edge only if both head and tail already exist in the graph and the edge kind is not ReferencedByEdgeKind (the generic reverse edge kind).
Types ¶
type EdgeFunc ¶
EdgeFunc is passed a new graph, an edge in the current graph, and should mutate the new graph as needed. If true is returned, the existing edge will be added to the graph.
func AddGraphEdgesTo ¶
AddGraphEdgesTo returns an EdgeFunc that will add the selected edges to the passed graph.
type Graph ¶
type Graph struct { // the standard graph graph.DirectedGraph // helper methods for switching on the kind and types of the node GraphDescriber // contains filtered or unexported fields }
func (Graph) ConnectedEdgeSubgraph ¶
ConnectedEdgeSubgraph creates a new graph that iterates through all edges in the graph and includes all edges the provided function returns true for. Nodes not referenced by an edge will be dropped unless the function adds them explicitly.
func (Graph) EdgeSubgraph ¶
EdgeSubgraph returns the directed subgraph with only the edges that match the provided function.
func (Graph) Find ¶ added in v0.5.3
func (g Graph) Find(name UniqueName) graph.Node
func (Graph) FindOrCreate ¶
func (g Graph) FindOrCreate(name UniqueName, fn NodeInitializerFunc) (graph.Node, bool)
func (Graph) InboundEdges ¶ added in v1.0.1
InboundEdges returns all the inbound edges to node that are in the list of edgeKinds if edgeKinds is empty, then all edges are returned
func (Graph) OutboundEdges ¶ added in v1.0.1
OutboundEdges returns all the outbound edges from node that are in the list of edgeKinds if edgeKinds is empty, then all edges are returned
func (Graph) PredecessorEdges ¶
PredecessorEdges invokes fn with all of the predecessor edges of node that have the specified edge kind.
func (Graph) Subgraph ¶
Subgraph returns the directed subgraph with only the nodes and edges that match the provided functions.
func (Graph) SubgraphWithNodes ¶
SubgraphWithNodes returns the directed subgraph with only the listed nodes and edges that match the provided function.
type GraphDescriber ¶
type Interface ¶
type Interface interface { graph.DirectedGraph graph.EdgeLister GraphDescriber MutableUniqueGraph }
type MutableDirectedEdge ¶
type MutableUniqueGraph ¶
type MutableUniqueGraph interface { graph.Mutable MutableDirectedEdge UniqueNodeInitializer NodeFinder }
type Node ¶
type Node struct { concrete.Node UniqueName }
type NodeFinder ¶ added in v0.5.3
type NodeFinder interface {
Find(name UniqueName) graph.Node
}
type NodeFunc ¶
NodeFunc is passed a new graph, a node in the graph, and should return true if the node should be included.
type NodeInitializerFunc ¶
type SortedNodeList ¶ added in v1.0.1
func (SortedNodeList) Len ¶ added in v1.0.1
func (m SortedNodeList) Len() int
func (SortedNodeList) Less ¶ added in v1.0.1
func (m SortedNodeList) Less(i, j int) bool
func (SortedNodeList) Swap ¶ added in v1.0.1
func (m SortedNodeList) Swap(i, j int)
type UniqueName ¶
type UniqueName string
func GetUniqueRuntimeObjectNodeName ¶ added in v1.0.1
func GetUniqueRuntimeObjectNodeName(nodeKind string, obj runtime.Object) UniqueName
func (UniqueName) UniqueName ¶
func (n UniqueName) UniqueName() string
type UniqueNameFunc ¶ added in v1.0.1
type UniqueNameFunc func(obj interface{}) UniqueName
type UniqueNodeInitializer ¶
type UniqueNodeInitializer interface {
FindOrCreate(name UniqueName, fn NodeInitializerFunc) (graph.Node, bool)
}
UniqueNodeInitializer is a graph that allows nodes with a unique name to be added without duplication. If the node is newly added, true will be returned.