Documentation ¶
Index ¶
- Variables
- func AddReversedEdge(g Interface, head, tail graph.Node, edgeKinds util.StringSet) 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, edgeKinds util.StringSet) 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, edgeKinds util.StringSet) bool
- func ReverseGraphEdge(g Interface, head, tail graph.Node, edgeKinds util.StringSet) bool
- type Edge
- type EdgeFunc
- type ExistenceChecker
- 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) EdgeSubgraph(edgeFn EdgeFunc) Graph
- func (g Graph) Edges() []graph.Edge
- 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) NodesByKind(nodeKinds ...string) []graph.Node
- func (g Graph) OutboundEdges(node graph.Node, edgeKinds ...string) []graph.Edge
- func (g Graph) PredecessorEdges(node graph.Node, fn EdgeFunc, edgeKinds ...string)
- func (g Graph) PredecessorNodesByEdgeKind(node graph.Node, edgeKinds ...string) []graph.Node
- 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, edgeKinds ...string)
- func (g Graph) SuccessorNodesByEdgeKind(node graph.Node, edgeKinds ...string) []graph.Node
- func (g Graph) SuccessorNodesByNodeAndEdgeKind(node graph.Node, nodeKind, edgeKind string) []graph.Node
- func (g Graph) SyntheticNodes() []graph.Node
- type GraphDescriber
- type Interface
- type MutableDirectedEdge
- type MutableUniqueGraph
- type Node
- type NodeFinder
- type NodeFunc
- type NodeInitializerFunc
- type NodeSet
- type ResourceNode
- type SortedNodes
- 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.
func EdgesOfKind ¶ added in v1.0.3
EdgesOfKind returns a new EdgeFunc accepting the provided kinds of edges
type ExistenceChecker ¶ added in v1.0.2
type ExistenceChecker interface { // Found returns true if the node represents an object that we don't have the backing object for Found() bool }
ExistenceChecker is an interface for those nodes that can be created without a backing object. This can happen when a node wants an edge to a non-existent node. We know the node should exist, The graph needs something in that location to track the information we have about the node, but the backing object doesn't exist.
type Graph ¶
type Graph struct { // the standard graph graph.Directed // 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 ¶
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) NodesByKind ¶ added in v1.0.2
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) PredecessorNodesByEdgeKind ¶ added in v1.0.2
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.
func (Graph) SuccessorEdges ¶
SuccessorEdges invokes fn with all of the successor edges of node that have the specified edge kind.
func (Graph) SuccessorNodesByEdgeKind ¶ added in v1.0.2
func (Graph) SuccessorNodesByNodeAndEdgeKind ¶ added in v1.0.2
func (Graph) SyntheticNodes ¶ added in v1.0.2
SyntheticNodes returns back the set of nodes that were created in response to edge requests, but did not exist
type GraphDescriber ¶
type Interface ¶
type Interface interface { graph.Directed GraphDescriber MutableUniqueGraph Edges() []graph.Edge }
type MutableDirectedEdge ¶
type MutableUniqueGraph ¶
type MutableUniqueGraph interface { graph.Mutable MutableDirectedEdge UniqueNodeInitializer NodeFinder }
type Node ¶
type Node struct { concrete.Node UniqueName }
type NodeFinder ¶
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.
func NodesOfKind ¶ added in v1.0.3
NodesOfKind returns a new NodeFunc accepting the provided kinds of nodes
type NodeInitializerFunc ¶
type ResourceNode ¶ added in v1.0.2
type ResourceNode interface {
ResourceString() string
}
type SortedNodes ¶ added in v1.0.3
func (SortedNodes) Len ¶ added in v1.0.3
func (m SortedNodes) Len() int
func (SortedNodes) Less ¶ added in v1.0.3
func (m SortedNodes) Less(i, j int) bool
func (SortedNodes) Swap ¶ added in v1.0.3
func (m SortedNodes) 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.