Documentation ¶
Index ¶
- Variables
- func BFS(tree *Tree, init Infoer, f ObserverFunc) error
- func DFS(tree *Tree, init Infoer, f ObserverFunc) error
- func ExtractData[T any](nodes []Noder) []T
- func FindBranchingPoint(n Noder) (Noder, Noder, bool)
- func NewTreeWithHistory(root Noder) *ud.History[*Tree]
- func PrintTree(tree *Tree) ([]string, error)
- type Branch
- type BranchIterator
- type Builder
- type CleanupCmd
- type DeleteBranchContainingCmd
- type ErrMissingRoot
- type ErrNodeNotPartOfTree
- type ExtractBranchCmd
- type InfPrinter
- type Infoer
- type InsertBranchCmd
- type NextsFunc
- type Noder
- type ObserverFunc
- type ProcessLeavesCmd
- type PruneBranchesCmd
- type PruneTreeCmd
- type RegenerateLeavesCmd
- type SetChildrenCmd
- type SkipFuncCmd
- type StatusInfo
- type Tree
- func (t *Tree) Cleanup()
- func (t *Tree) Copy() uc.Copier
- func (t *Tree) DeleteBranchContaining(n Noder) error
- func (t *Tree) ExtractBranch(leaf Noder, delete bool) (*Branch, error)
- func (t *Tree) FString(trav *ffs.Traversor, opts ...ffs.Option) error
- func (t *Tree) FilterChildren(filter us.PredicateFilter[Noder]) ([]Noder, error)
- func (t *Tree) GetDirectChildren() ([]Noder, error)
- func (t *Tree) GetLeaves() []Noder
- func (t *Tree) HasChild(filter us.PredicateFilter[Noder]) (bool, error)
- func (t *Tree) InsertBranch(branch *Branch) (bool, error)
- func (t *Tree) IsSingleton() bool
- func (t *Tree) ProcessLeaves(f uc.EvalManyFunc[Noder, Noder]) error
- func (t *Tree) Prune(filter us.PredicateFilter[Noder]) (bool, error)
- func (t *Tree) PruneBranches(filter us.PredicateFilter[Noder]) bool
- func (t *Tree) PruneFunc(filter us.PredicateFilter[Noder]) bool
- func (t *Tree) RegenerateLeaves() ([]Noder, error)
- func (t *Tree) Root() Noder
- func (t *Tree) SearchNodes(f us.PredicateFilter[Noder]) (Noder, error)
- func (t *Tree) SetChildren(children []*Tree) error
- func (t *Tree) Size() int
- func (t *Tree) SkipFilter(filter us.PredicateFilter[Noder]) (forest []*Tree)
- func (t *Tree) SnakeTraversal() ([][]Noder, error)
- func (t *Tree) UpdateLeaves() ([]Noder, error)
- type TreeNode
- func (n *TreeNode[T]) AddChild(child Noder)
- func (n *TreeNode[T]) AddChildren(children ...*TreeNode[T])
- func (tn *TreeNode[T]) Cleanup()
- func (n *TreeNode[T]) Copy() uc.Copier
- func (n *TreeNode[T]) DeleteChild(target Noder) []Noder
- func (t *TreeNode[T]) FString(trav *ffs.Traversor, opts ...ffs.Option) error
- func (n *TreeNode[T]) GetAncestors() []Noder
- func (n *TreeNode[T]) GetChildren() []Noder
- func (n *TreeNode[T]) GetData() T
- func (n *TreeNode[T]) GetFirstChild() Noder
- func (n *TreeNode[T]) GetFirstSibling() *TreeNode[T]
- func (n *TreeNode[T]) GetLastSibling() *TreeNode[T]
- func (n *TreeNode[T]) GetLeaves() []Noder
- func (n *TreeNode[T]) GetParent() Noder
- func (n *TreeNode[T]) HasChild(target *TreeNode[T]) bool
- func (n *TreeNode[T]) IsChildOf(target *TreeNode[T]) bool
- func (n *TreeNode[T]) IsLeaf() bool
- func (n *TreeNode[T]) IsRoot() bool
- func (n *TreeNode[T]) IsSingleton() bool
- func (t *TreeNode[T]) Iterator() uc.Iterater[Noder]
- func (tn *TreeNode[T]) LinkChildren(children []Noder)
- func (n *TreeNode[T]) RemoveNode() []Noder
- func (n *TreeNode[T]) SetParent(parent Noder) bool
- func (n *TreeNode[T]) Size() int
- func (n *TreeNode[T]) TreeOf() *Tree
- type TreeNodeIterator
- type Treeer
- type UpdateLeavesCmd
Constants ¶
This section is empty.
Variables ¶
var ( // FilterNonNilTree is a filter that returns true if the tree is not nil. // // Parameters: // - tree: The tree to filter. // // Returns: // - bool: True if the tree is not nil, false otherwise. FilterNonNilTree us.PredicateFilter[*Tree] )
Functions ¶
func BFS ¶ added in v0.3.37
func BFS(tree *Tree, init Infoer, f ObserverFunc) error
BFS traverses the tree in breadth-first order.
Parameters:
- tree: The tree to traverse.
- init: The initial info.
- f: The observer function.
Returns:
- error: An error if the traversal fails.
func DFS ¶ added in v0.3.37
func DFS(tree *Tree, init Infoer, f ObserverFunc) error
DFS traverses the tree in depth-first order.
Parameters:
- tree: The tree to traverse.
- init: The initial info.
- f: The observer function.
Returns:
- error: An error if the traversal fails.
func ExtractData ¶
ExtractData returns the values of the nodes in the slice. This only works if the nodes are of type *TreeNode[T].
Parameters:
- nodes: The nodes to extract the values from.
Returns:
- []T: A slice of the values of the nodes.
func FindBranchingPoint ¶ added in v0.3.37
FindBranchingPoint returns the first node in the path from n to the root such that has more than one sibling.
Returns:
- Noder: The branching point.
- Noder: The parent of the branching point.
- bool: True if the node has a branching point, false otherwise.
Behaviors:
- If there is no branching point, it returns the root of the tree. However, if n is nil, it returns nil, nil, false and if the node has no parent, it returns nil, n, false.
func NewTreeWithHistory ¶ added in v0.3.33
NewTree creates a new tree with the given root.
Parameters:
- root: The root of the tree.
Returns:
- *Debugging.History[*Tree]: A pointer to the history of the tree.
Types ¶
type Branch ¶ added in v0.3.34
type Branch struct {
// contains filtered or unexported fields
}
Branch represents a branch in a tree.
func NewBranch ¶ added in v0.3.37
NewBranch works like GetAncestors but includes the node itself.
The nodes are returned as a slice where [0] is the root node and [len(branch)-1] is the leaf node.
Returns:
- *Branch: The branch from the node to the root.
type BranchIterator ¶ added in v0.3.34
type BranchIterator struct {
// contains filtered or unexported fields
}
BranchIterator is the pull-based iterator for the branch.
func (*BranchIterator) Consume ¶ added in v0.3.34
func (bi *BranchIterator) Consume() (Noder, error)
Consume implements the common.Iterater interface.
This scans from the root node to the leaf node.
Noder is never nil.
func (*BranchIterator) Restart ¶ added in v0.3.34
func (bi *BranchIterator) Restart()
Restart implements the common.Iterater interface.
type Builder ¶ added in v0.3.37
type Builder struct {
// contains filtered or unexported fields
}
Builder is a struct that builds a tree.
func (*Builder) Build ¶ added in v0.3.37
MakeTree creates a tree from the given element.
Parameters:
- elem: The element to start the tree from.
- info: The info of the element.
- f: The function that, given an element and info, returns the next elements. (i.e., the children of the element).
Returns:
- *Tree: The tree created from the element.
- error: An error if the next function fails.
Behaviors:
- The 'info' parameter is copied for each node and it specifies the initial info before traversing the tree.
func (*Builder) SetInfo ¶ added in v0.3.37
SetInfo sets the info of the builder.
Parameters:
- info: The info to set.
func (*Builder) SetNextFunc ¶ added in v0.3.37
SetNextFunc sets the next function of the builder.
Parameters:
- f: The function to set.
type CleanupCmd ¶ added in v0.3.33
type CleanupCmd struct {
// contains filtered or unexported fields
}
CleanupCmd is a command that cleans up the tree.
func NewCleanupCmd ¶ added in v0.3.33
func NewCleanupCmd() *CleanupCmd
NewCleanupCmd creates a new CleanupCmd.
Returns:
- *CleanupCmd: A pointer to the new CleanupCmd.
func (*CleanupCmd) Copy ¶ added in v0.3.33
func (cmd *CleanupCmd) Copy() uc.Copier
Copy implements the Debugging.Commander interface.
func (*CleanupCmd) Execute ¶ added in v0.3.33
func (cmd *CleanupCmd) Execute(data *Tree) error
Execute implements the Debugging.Commander interface.
Never errors.
func (*CleanupCmd) Undo ¶ added in v0.3.33
func (cmd *CleanupCmd) Undo(data *Tree) error
Undo implements the Debugging.Commander interface.
Never errors.
type DeleteBranchContainingCmd ¶ added in v0.3.33
type DeleteBranchContainingCmd struct {
// contains filtered or unexported fields
}
DeleteBranchContainingCmd is a command that deletes the branch containing the given node.
func NewDeleteBranchContainingCmd ¶ added in v0.3.33
func NewDeleteBranchContainingCmd(tn Noder) *DeleteBranchContainingCmd
NewDeleteBranchContainingCmd creates a new DeleteBranchContainingCmd.
Parameters:
- tn: The node to delete.
Returns:
- *DeleteBranchContainingCmd: A pointer to the new DeleteBranchContainingCmd.
func (*DeleteBranchContainingCmd) Copy ¶ added in v0.3.33
func (cmd *DeleteBranchContainingCmd) Copy() uc.Copier
Copy implements the Debugging.Commander interface.
func (*DeleteBranchContainingCmd) Execute ¶ added in v0.3.33
func (cmd *DeleteBranchContainingCmd) Execute(data *Tree) error
Execute implements the Debugging.Commander interface.
func (*DeleteBranchContainingCmd) Undo ¶ added in v0.3.33
func (cmd *DeleteBranchContainingCmd) Undo(data *Tree) error
Undo implements the Debugging.Commander interface.
type ErrMissingRoot ¶
type ErrMissingRoot struct{}
ErrMissingRoot is an error that is returned when the root of a tree is missing.
func NewErrMissingRoot ¶
func NewErrMissingRoot() *ErrMissingRoot
NewErrMissingRoot creates a new ErrMissingRoot.
Returns:
- *ErrMissingRoot: The newly created error.
func (*ErrMissingRoot) Error ¶
func (e *ErrMissingRoot) Error() string
Error implements the error interface.
Message: "missing root".
type ErrNodeNotPartOfTree ¶
type ErrNodeNotPartOfTree struct{}
ErrNodeNotPartOfTree is an error that is returned when a node is not part of a tree.
func NewErrNodeNotPartOfTree ¶
func NewErrNodeNotPartOfTree() *ErrNodeNotPartOfTree
NewErrNodeNotPartOfTree creates a new ErrNodeNotPartOfTree.
Returns:
- *ErrNodeNotPartOfTree: The newly created error.
func (*ErrNodeNotPartOfTree) Error ¶
func (e *ErrNodeNotPartOfTree) Error() string
Error implements the error interface.
Message: "node is not part of the tree".
type ExtractBranchCmd ¶ added in v0.3.34
type ExtractBranchCmd struct {
// contains filtered or unexported fields
}
ExtractBranchCmd is a command that extracts the branch containing the given node.
func NewExtractBranchCmd ¶ added in v0.3.34
func NewExtractBranchCmd(leaf Noder) *ExtractBranchCmd
NewExtractBranchCmd creates a new ExtractBranchCmd.
Parameters:
- leaf: The leaf to extract the branch from.
Returns:
- *ExtractBranchCmd: A pointer to the new ExtractBranchCmd.
func (*ExtractBranchCmd) Copy ¶ added in v0.3.34
func (cmd *ExtractBranchCmd) Copy() uc.Copier
Copy implements the Debugging.Commander interface.
func (*ExtractBranchCmd) Execute ¶ added in v0.3.34
func (cmd *ExtractBranchCmd) Execute(data *Tree) error
Execute implements the Debugging.Commander interface.
func (*ExtractBranchCmd) GetBranch ¶ added in v0.3.35
func (cmd *ExtractBranchCmd) GetBranch() *Branch
GetBranch returns the value of the branch field.
Call this function after executing the command.
Returns:
- *Branch[T]: A pointer to the branch extracted.
func (*ExtractBranchCmd) Undo ¶ added in v0.3.34
func (cmd *ExtractBranchCmd) Undo(data *Tree) error
Undo implements the Debugging.Commander interface.
type InfPrinter ¶ added in v0.3.37
type InfPrinter struct {
// contains filtered or unexported fields
}
InfPrinter is a struct that prints the tree.
func NewInfPrinter ¶ added in v0.3.37
func NewInfPrinter() *InfPrinter
NewInfPrinter creates a new InfPrinter.
Returns:
- *InfPrinter: The new InfPrinter.
func (*InfPrinter) Copy ¶ added in v0.3.37
func (ip *InfPrinter) Copy() uc.Copier
Copy implements the common.Copier interface.
func (*InfPrinter) IncIndent ¶ added in v0.3.37
func (ip *InfPrinter) IncIndent()
IncIndent increments the indentation level.
type InsertBranchCmd ¶ added in v0.3.34
type InsertBranchCmd struct {
// contains filtered or unexported fields
}
InsertBranchCmd is a command that inserts a branch into the tree.
func NewInsertBranchCmd ¶ added in v0.3.34
func NewInsertBranchCmd(branch *Branch) *InsertBranchCmd
NewInsertBranchCmd creates a new InsertBranchCmd.
Parameters:
- branch: The branch to insert.
Returns:
- *InsertBranchCmd: A pointer to the new InsertBranchCmd.
func (*InsertBranchCmd) Copy ¶ added in v0.3.34
func (cmd *InsertBranchCmd) Copy() uc.Copier
Copy implements the Debugging.Commander interface.
func (*InsertBranchCmd) Execute ¶ added in v0.3.34
func (cmd *InsertBranchCmd) Execute(data *Tree) error
Execute implements the Debugging.Commander interface.
func (*InsertBranchCmd) Undo ¶ added in v0.3.34
func (cmd *InsertBranchCmd) Undo(data *Tree) error
Undo implements the Debugging.Commander interface.
type NextsFunc ¶ added in v0.3.37
NextsFunc is a function that returns the next elements.
Parameters:
- elem: The element to get the next elements from.
- info: The info of the element.
Returns:
- []Noder: The next elements.
- error: An error if the function fails.
type Noder ¶ added in v0.3.37
type Noder interface { // SetParent sets the parent of the node. // // Parameters: // - parent: The parent node. // // Returns: // - bool: True if the parent is set, false otherwise. SetParent(parent Noder) bool // GetParent returns the parent of the node. // // Returns: // - Noder: The parent node. GetParent() Noder // LinkWithParent links the parent with the children. It also links the children // with each other. // // Parameters: // - parent: The parent node. // - children: The children nodes. // // Behaviors: // - Only valid children are linked while the rest are ignored. LinkChildren(children []Noder) // IsLeaf returns true if the node is a leaf. // // Returns: // - bool: True if the node is a leaf, false otherwise. IsLeaf() bool // IsSingleton returns true if the node is a singleton (i.e., has only one child). // // Returns: // - bool: True if the node is a singleton, false otherwise. IsSingleton() bool // GetLeaves returns all the leaves of the tree rooted at the node. // // Should be a DFS traversal. // // Returns: // - []Noder: A slice of pointers to the leaves of the tree. // // Behaviors: // - The leaves are returned in the order of a DFS traversal. GetLeaves() []Noder // GetAncestors returns all the ancestors of the node. // // This excludes the node itself. // // Returns: // - []Noder: A slice of pointers to the ancestors of the node. // // Behaviors: // - The ancestors are returned in the opposite order of a DFS traversal. // Therefore, the first element is the parent of the node. GetAncestors() []Noder // GetFirstChild returns the first child of the node. // // Returns: // - Noder: The first child of the node. Nil if the node has no children. GetFirstChild() Noder // DeleteChild removes the given child from the children of the node. // // Parameters: // - target: The child to remove. // // Returns: // - []Noder: A slice of pointers to the children of the node. Nil if the node has no children. DeleteChild(target Noder) []Noder // Size returns the number of nodes in the tree rooted at n. // // Returns: // - size: The number of nodes in the tree. Size() int // AddChild adds a new child to the node with the given data. // // Parameters: // - child: The child to add. // // Behaviors: // - If the child is not valid, it is ignored. AddChild(child Noder) // removeNode removes the node from the tree and shifts the children up // in the space occupied by the node. // // Returns: // - []Noder: A slice of pointers to the children of the node if // the node is the root. Nil otherwise. RemoveNode() []Noder Treeer uc.Iterable[Noder] uc.Copier ffs.FStringer uto.Cleaner }
Noder is an interface that represents a node in a tree.
func FindCommonAncestor ¶
FindCommonAncestor returns the first common ancestor of the two nodes.
Parameters:
- n1: The first node.
- n2: The second node.
Returns:
- Noder: A pointer to the common ancestor. Nil if no such node is found.
type ObserverFunc ¶ added in v0.3.37
ObserverFunc is a function that observes a node.
Parameters:
- data: The data of the node.
- info: The info of the node.
Returns:
- bool: True if the traversal should continue, otherwise false.
- error: An error if the observation fails.
type ProcessLeavesCmd ¶ added in v0.3.33
type ProcessLeavesCmd struct {
// contains filtered or unexported fields
}
ProcessLeavesCmd is a command that processes the leaves of the tree.
func NewProcessLeavesCmd ¶ added in v0.3.33
func NewProcessLeavesCmd(f uc.EvalManyFunc[Noder, Noder]) *ProcessLeavesCmd
NewProcessLeavesCmd creates a new ProcessLeavesCmd.
Parameters:
- f: The function to apply to the leaves.
Returns:
- *ProcessLeavesCmd: A pointer to the new ProcessLeavesCmd.
func (*ProcessLeavesCmd) Copy ¶ added in v0.3.33
func (cmd *ProcessLeavesCmd) Copy() uc.Copier
Copy implements the Debugging.Commander interface.
func (*ProcessLeavesCmd) Execute ¶ added in v0.3.33
func (cmd *ProcessLeavesCmd) Execute(data *Tree) error
Execute implements the Debugging.Commander interface.
func (*ProcessLeavesCmd) Undo ¶ added in v0.3.33
func (cmd *ProcessLeavesCmd) Undo(data *Tree) error
Undo implements the Debugging.Commander interface.
type PruneBranchesCmd ¶ added in v0.3.33
type PruneBranchesCmd struct {
// contains filtered or unexported fields
}
PruneBranchesCmd is a command that prunes the branches of the tree.
func NewPruneBranchesCmd ¶ added in v0.3.33
func NewPruneBranchesCmd(filter us.PredicateFilter[Noder]) *PruneBranchesCmd
NewPruneBranchesCmd creates a new PruneBranchesCmd.
Parameters:
- filter: The filter to apply to prune the branches.
Returns:
- *PruneBranchesCmd: A pointer to the new PruneBranchesCmd.
func (*PruneBranchesCmd) Copy ¶ added in v0.3.33
func (cmd *PruneBranchesCmd) Copy() uc.Copier
Copy implements the Debugging.Commander interface.
func (*PruneBranchesCmd) Execute ¶ added in v0.3.33
func (cmd *PruneBranchesCmd) Execute(data *Tree) error
Execute implements the Debugging.Commander interface.
Never errors.
func (*PruneBranchesCmd) GetOk ¶ added in v0.3.33
func (cmd *PruneBranchesCmd) GetOk() bool
GetOk returns the value of the ok field.
Call this function after executing the command.
Returns:
- bool: The value of the ok field.
func (*PruneBranchesCmd) Undo ¶ added in v0.3.33
func (cmd *PruneBranchesCmd) Undo(data *Tree) error
Undo implements the Debugging.Commander interface.
Never errors.
type PruneTreeCmd ¶ added in v0.3.33
type PruneTreeCmd struct {
// contains filtered or unexported fields
}
PruneTreeCmd is a command that prunes the tree using the given filter.
func NewPruneTreeCmd ¶ added in v0.3.33
func NewPruneTreeCmd(filter us.PredicateFilter[Noder]) *PruneTreeCmd
NewPruneTreeCmd creates a new PruneTreeCmd.
Parameters:
- filter: The filter to use to prune the tree.
Returns:
- *PruneTreeCmd: A pointer to the new PruneTreeCmd.
func (*PruneTreeCmd) Copy ¶ added in v0.3.33
func (cmd *PruneTreeCmd) Copy() uc.Copier
Copy implements the Debugging.Commander interface.
func (*PruneTreeCmd) Execute ¶ added in v0.3.33
func (cmd *PruneTreeCmd) Execute(data *Tree) error
Execute implements the Debugging.Commander interface.
func (*PruneTreeCmd) GetOk ¶ added in v0.3.33
func (cmd *PruneTreeCmd) GetOk() bool
GetOk returns the value of the ok field.
Call this function after executing the command.
Returns:
- bool: The value of the ok field.
func (*PruneTreeCmd) Undo ¶ added in v0.3.33
func (cmd *PruneTreeCmd) Undo(data *Tree) error
Undo implements the Debugging.Commander interface.
type RegenerateLeavesCmd ¶ added in v0.3.33
type RegenerateLeavesCmd struct {
// contains filtered or unexported fields
}
RegenerateLeavesCmd is a command that regenerates the leaves of the tree.
func NewRegenerateLeavesCmd ¶ added in v0.3.33
func NewRegenerateLeavesCmd() *RegenerateLeavesCmd
NewRegenerateLeavesCmd creates a new RegenerateLeavesCmd.
Returns:
- *RegenerateLeavesCmd: A pointer to the new RegenerateLeavesCmd.
func (*RegenerateLeavesCmd) Copy ¶ added in v0.3.33
func (cmd *RegenerateLeavesCmd) Copy() uc.Copier
Copy implements the Debugging.Commander interface.
func (*RegenerateLeavesCmd) Execute ¶ added in v0.3.33
func (cmd *RegenerateLeavesCmd) Execute(data *Tree) error
Execute implements the Debugging.Commander interface.
func (*RegenerateLeavesCmd) Undo ¶ added in v0.3.33
func (cmd *RegenerateLeavesCmd) Undo(data *Tree) error
Undo implements the Debugging.Commander interface.
type SetChildrenCmd ¶ added in v0.3.33
type SetChildrenCmd struct {
// contains filtered or unexported fields
}
SetChildrenCmd is a command that sets the children of a node.
func NewSetChildrenCmd ¶ added in v0.3.33
func NewSetChildrenCmd(children []*Tree) *SetChildrenCmd
NewSetChildrenCmd creates a new SetChildrenCmd.
Parameters:
- children: The children to set.
Returns:
- *SetChildrenCmd: A pointer to the new SetChildrenCmd.
func (*SetChildrenCmd) Copy ¶ added in v0.3.33
func (cmd *SetChildrenCmd) Copy() uc.Copier
Copy implements the Debugging.Commander interface.
func (*SetChildrenCmd) Execute ¶ added in v0.3.33
func (cmd *SetChildrenCmd) Execute(data *Tree) error
Execute implements the Debugging.Commander interface.
func (*SetChildrenCmd) Undo ¶ added in v0.3.33
func (cmd *SetChildrenCmd) Undo(data *Tree) error
Undo implements the Debugging.Commander interface.
Never errors.
type SkipFuncCmd ¶ added in v0.3.33
type SkipFuncCmd struct {
// contains filtered or unexported fields
}
SkipFuncCmd is a command that skips the nodes of the tree that satisfy the given filter.
func NewSkipFuncCmd ¶ added in v0.3.33
func NewSkipFuncCmd(filter us.PredicateFilter[Noder]) *SkipFuncCmd
NewSkipFuncCmd creates a new SkipFuncCmd.
Parameters:
- filter: The filter to apply to skip the nodes.
Returns:
- *SkipFuncCmd: A pointer to the new SkipFuncCmd.
func (*SkipFuncCmd) Copy ¶ added in v0.3.33
func (cmd *SkipFuncCmd) Copy() uc.Copier
Copy implements the Debugging.Commander interface.
func (*SkipFuncCmd) Execute ¶ added in v0.3.33
func (cmd *SkipFuncCmd) Execute(data *Tree) error
Execute implements the Debugging.Commander interface.
Never errors.
func (*SkipFuncCmd) GetTrees ¶ added in v0.3.33
func (cmd *SkipFuncCmd) GetTrees() []*Tree
GetTrees returns the value of the trees field.
Call this function after executing the command.
Returns:
- []*Tree: A slice of pointers to the trees obtained after skipping the nodes.
func (*SkipFuncCmd) Undo ¶ added in v0.3.33
func (cmd *SkipFuncCmd) Undo(data *Tree) error
Undo implements the Debugging.Commander interface.
Never errors.
type StatusInfo ¶ added in v0.3.34
StatusInfo is a generic data structure that represents a status node in a tree.
func NewStatusInfo ¶ added in v0.3.34
func NewStatusInfo[S uc.Enumer, T any](data T, status S) *StatusInfo[S, T]
NewStatusInfo creates a new status node.
Parameters:
- data: The data of the status node.
- status: The status of the status node.
Returns:
- *StatusInfo[S, T]: The new status node.
func (*StatusInfo[S, T]) ChangeStatus ¶ added in v0.3.34
func (si *StatusInfo[S, T]) ChangeStatus(status S)
ChangeStatus sets the status of the tree node.
Parameters:
- status: The status to set.
func (*StatusInfo[S, T]) GetData ¶ added in v0.3.34
func (si *StatusInfo[S, T]) GetData() T
GetData returns the data of the tree node.
Returns:
- T: The data of the tree node.
func (*StatusInfo[S, T]) GetStatus ¶ added in v0.3.34
func (si *StatusInfo[S, T]) GetStatus() S
GetStatus returns the status of the tree node.
Returns:
- S: The status of the tree node.
func (*StatusInfo[S, T]) SetData ¶ added in v0.3.34
func (si *StatusInfo[S, T]) SetData(data T)
SetData sets the data of the tree node.
Parameters:
- data: The data to set.
type Tree ¶
type Tree struct {
// contains filtered or unexported fields
}
Tree is a generic data structure that represents a tree.
func NewTree ¶
NewTree creates a new tree with the given value as the root.
Parameters:
- data: The value of the root.
Returns:
- *Tree: A pointer to the newly created tree.
func (*Tree) DeleteBranchContaining ¶
DeleteBranchContaining deletes the branch containing the given node.
Parameters:
- n: The node to delete.
Returns:
- error: An error if the node is not a part of the tree.
func (*Tree) ExtractBranch ¶ added in v0.3.34
ExtractBranch extracts the branch of the tree that contains the given leaf.
Parameters:
- leaf: The leaf to extract the branch from.
- delete: If true, the branch is deleted from the tree.
Returns:
- *Branch[Noder]: A pointer to the branch extracted. Nil if the leaf is not a part of the tree.
func (*Tree) FilterChildren ¶
FilterChildren returns all the children of the tree that satisfy the given filter in a BFS order.
The filter must assume that the node is never nil.
Parameters:
- filter: The filter to apply.
Returns:
- []Noder: A slice of the children that satisfy the filter.
- error: An error if iterating over the children fails.
func (*Tree) GetDirectChildren ¶
GetDirectChildren returns the direct children of the root of the tree.
Children are never nil.
Returns:
- []Noder: A slice of the direct children of the root. Nil if the tree does not have a root.
- error: An error if the iteration fails.
func (*Tree) GetLeaves ¶
GetLeaves returns all the leaves of the tree.
Returns:
- []Noder: A slice of the leaves of the tree. Nil if the tree does not have a root.
Behaviors:
- It returns the leaves that are stored in the tree. Make sure to call any update function before calling this function if the tree has been modified unexpectedly.
func (*Tree) HasChild ¶
HasChild returns true if the tree has the given child in any of its nodes in a BFS order.
The filter must assume that the node is never nil.
Parameters:
- filter: The filter to apply.
Returns:
- bool: True if the tree has the child, false otherwise.
- error: An error if the child is not of type Noder.
func (*Tree) InsertBranch ¶ added in v0.3.34
InsertBranch inserts the given branch into the tree.
Parameters:
- branch: The branch to insert.
Returns:
- bool: True if the branch was inserted, false otherwise.
- error: An error if the insertion fails.
func (*Tree) IsSingleton ¶
IsSingleton returns true if the tree has only one node.
Returns:
- bool: True if the tree has only one node, false otherwise.
func (*Tree) ProcessLeaves ¶
ProcessLeaves applies the given function to the leaves of the tree and replaces the leaves with the children returned by the function.
Parameters:
- f: The function to apply to the leaves.
Returns:
- error: An error returned by the function.
Behaviors:
- The function is applied to the leaves in order.
- The function must return a slice of values of type Noder.
- If the function returns an error, the process stops and the error is returned.
- The leaves are replaced with the children returned by the function.
func (*Tree) Prune ¶ added in v0.3.27
PruneTree prunes the tree using the given filter.
Parameters:
- filter: The filter to use to prune the tree.
Returns:
- bool: True if no nodes were pruned, false otherwise.
- error: An error if the iteration fails.
func (*Tree) PruneBranches ¶
func (t *Tree) PruneBranches(filter us.PredicateFilter[Noder]) bool
PruneBranches removes all the children of the node that satisfy the given filter. The filter is a function that takes the value of a node and returns a boolean. If the filter returns true for a child, the child is removed along with its children.
Parameters:
- filter: The filter to apply.
Returns:
- bool: True if the whole tree can be deleted, false otherwise.
Behaviors:
- If the root satisfies the filter, the tree is cleaned up.
- It is a recursive function.
func (*Tree) PruneFunc ¶ added in v0.3.37
func (t *Tree) PruneFunc(filter us.PredicateFilter[Noder]) bool
PruneFunc removes all the children of the node that satisfy the given filter including all of their children.
Parameters:
- filter: The filter to apply.
Returns:
- bool: True if the node satisfies the filter, false otherwise.
Behaviors:
- The root node is not pruned.
func (*Tree) RegenerateLeaves ¶
RegenerateLeaves regenerates the leaves of the tree and returns them.
Returns:
- []Noder: The newly generated leaves of the tree.
- error: An error if the leaves could not be generated or the nodes are not of type Noder.
Behaviors:
- The leaves are updated in a DFS order.
- Expensive operation; use it only when necessary (i.e., leaves changed unexpectedly.)
- This also updates the size of the tree.
func (*Tree) Root ¶
Root returns the root of the tree.
Returns:
- Noder: The root of the tree. Nil if the tree does not have a root.
func (*Tree) SearchNodes ¶
SearchNodes searches for the first node that satisfies the given filter in a BFS order.
Parameters:
- f: The filter to apply.
Returns:
- Noder: The node that satisfies the filter.
- error: An error if the node is not found or the iteration fails.
Errors:
- *common.ErrNotFound: If the node is not found.
- error: The error returned by the iteration function.
func (*Tree) SetChildren ¶
SetChildren sets the children of the root of the tree.
Parameters:
- children: The children to set.
Returns:
- error: An error of type *ErrMissingRoot if the tree does not have a root.
func (*Tree) Size ¶
Size returns the number of nodes in the tree.
Returns:
- int: The number of nodes in the tree.
func (*Tree) SkipFilter ¶
func (t *Tree) SkipFilter(filter us.PredicateFilter[Noder]) (forest []*Tree)
SkipFunc removes all the children of the tree that satisfy the given filter without removing any of their children. Useful for removing unwanted nodes from the tree.
Parameters:
- filter: The filter to apply.
Returns:
- []*Tree: A slice of pointers to the trees obtained after removing the nodes.
Behaviors:
- If this function returns only one tree, this is the updated tree. But, if it returns more than one tree, then we have deleted the root of the tree and obtained a forest.
func (*Tree) SnakeTraversal ¶
SnakeTraversal returns all the paths from the root to the leaves of the tree.
Returns:
- [][]Noder: A slice of slices of elements.
- error: An error if the iterator fails.
Behaviors:
- The paths are returned in the order of a BFS traversal.
func (*Tree) UpdateLeaves ¶
UpdateLeaves updates the leaves of the tree and returns them.
Returns:
- []Noder: The newly generated leaves of the tree.
- error: An error if the leaves could not be generated or the nodes are not of type Noder.
Behaviors:
- The leaves are updated in a DFS order.
- Less expensive than RegenerateLeaves. However, if nodes has been deleted from the tree, this may give unexpected results.
- This also updates the size of the tree.
type TreeNode ¶
type TreeNode[T any] struct { // Parent, FirstChild, NextSibling, LastChild, PrevSibling are pointers to // the parent, first child, next sibling, last child, and previous sibling // of the node respectively. Parent, FirstChild, NextSibling, LastChild, PrevSibling *TreeNode[T] // Data is the value of the node. Data T }
TreeNode is a generic data structure that represents a node in a tree.
func NewTreeNode ¶
NewTreeNode creates a new node with the given data.
Parameters:
- data: The value of the node.
Returns:
- *TreeNode[T]: A pointer to the newly created node.
func (*TreeNode[T]) AddChild ¶
AddChild adds a new child to the node with the given data.
Parameters:
- child: The child to add.
Behaviors:
- If the child is nil, it does nothing.
func (*TreeNode[T]) AddChildren ¶
AddChildren adds zero or more children to the node.
Parameters:
- children: The children to add.
Behaviors:
- This is just a more efficient way to add multiple children.
func (*TreeNode[T]) Cleanup ¶ added in v0.3.37
func (tn *TreeNode[T]) Cleanup()
Cleanup implements the Noder interface.
Uses DFS traversal, does not use recursion, and does not remove the node itself.
func (*TreeNode[T]) DeleteChild ¶
DeleteChild implements the Noder interface.
func (*TreeNode[T]) GetAncestors ¶
GetAncestors implements the Noder interface.
func (*TreeNode[T]) GetChildren ¶
GetChildren returns all the children of the node. If the node has no children, it returns nil.
Returns:
- []Noder: A slice of pointers to the children of the node.
func (*TreeNode[T]) GetData ¶
func (n *TreeNode[T]) GetData() T
GetData is a getter for the data of the node.
Returns:
- T: The data of the node.
func (*TreeNode[T]) GetFirstChild ¶ added in v0.3.37
GetFirstChild implements the Noder interface.
func (*TreeNode[T]) GetFirstSibling ¶ added in v0.3.37
GetFirstSibling returns the first sibling of the node. If it has a parent, it returns the first child of the parent. Otherwise, it returns the first sibling of the node.
Returns:
- *TreeNode[T]: A pointer to the first sibling. The node itself if it has no previous sibling.
func (*TreeNode[T]) GetLastSibling ¶ added in v0.3.37
GetLastSibling returns the last sibling of the node. If it has a parent, it returns the last child of the parent. Otherwise, it returns the last sibling of the node.
Returns:
- *TreeNode[T]: A pointer to the last sibling. The node itself if it has no next sibling.
func (*TreeNode[T]) HasChild ¶
HasChild returns true if the node has the given child.
Parameters:
- target: The child to check for.
Returns:
- bool: True if the node has the child, false otherwise.
func (*TreeNode[T]) IsChildOf ¶
IsChildOf returns true if the node is a child of the parent.
Parameters:
- target: The target parent to check for.
Returns:
- bool: True if the node is a child of the parent, false otherwise.
func (*TreeNode[T]) IsRoot ¶
IsRoot returns true if the node does not have a parent.
Returns:
- bool: True if the node is the root, false otherwise.
func (*TreeNode[T]) IsSingleton ¶ added in v0.3.37
IsSingleton implements the Noder interface.
func (*TreeNode[T]) LinkChildren ¶ added in v0.3.37
LinkWithParent implements the Noder interface.
Children that are not *TreeNode[T] are ignored.
func (*TreeNode[T]) RemoveNode ¶ added in v0.3.37
RemoveNode removes the node from the tree and shifts the children up in the space occupied by the node.
Returns:
- []Noder: A slice of pointers to the children of the node if the node is the root. Nil otherwise.
type TreeNodeIterator ¶ added in v0.3.37
type TreeNodeIterator[T any] struct { // contains filtered or unexported fields }
TreeNodeIterator is a iterator that iterates over the children of a tree node.
func NewTreeNodeIterator ¶ added in v0.3.37
func NewTreeNodeIterator[T any](node *TreeNode[T]) *TreeNodeIterator[T]
NewTreeNodeIterator creates a new iterator for the given node.
Parameters:
- node: The node whose children are being iterated over.
Returns:
- *TreeNodeIterator[T]: A pointer to the iterator. Nil if the node is nil.
func (*TreeNodeIterator[T]) Consume ¶ added in v0.3.37
func (t *TreeNodeIterator[T]) Consume() (Noder, error)
Size implements the common.Iterater interface.
func (*TreeNodeIterator[T]) Restart ¶ added in v0.3.37
func (t *TreeNodeIterator[T]) Restart()
Restart implements the common.Iterater interface.
type Treeer ¶
type Treeer interface { // TreeOf converts the type to a tree. // // Returns: // - *Tree: A pointer to the tree. TreeOf() *Tree }
Treeer is an interface for types that can be converted to a tree.
type UpdateLeavesCmd ¶ added in v0.3.33
type UpdateLeavesCmd struct {
// contains filtered or unexported fields
}
UpdateLeavesCmd is a command that updates the leaves of the tree.
func NewUpdateLeavesCmd ¶ added in v0.3.33
func NewUpdateLeavesCmd() *UpdateLeavesCmd
NewUpdateLeavesCmd creates a new UpdateLeavesCmd.
Returns:
- *UpdateLeavesCmd: A pointer to the new UpdateLeavesCmd.
func (*UpdateLeavesCmd) Copy ¶ added in v0.3.33
func (cmd *UpdateLeavesCmd) Copy() uc.Copier
Copy implements the Debugging.Commander interface.
func (*UpdateLeavesCmd) Execute ¶ added in v0.3.33
func (cmd *UpdateLeavesCmd) Execute(data *Tree) error
Execute implements the Debugging.Commander interface.
func (*UpdateLeavesCmd) Undo ¶ added in v0.3.33
func (cmd *UpdateLeavesCmd) Undo(data *Tree) error
Undo implements the Debugging.Commander interface.