Struct im_pathtree::PathTree
source · pub struct PathTree<T>where
T: PathTreeTypes,{ /* private fields */ }
Expand description
Cheaply clonable path tree structure.
Could be shared safely between multiple threads.
Implementations§
source§impl<T: PathTreeTypes> PathTree<T>
impl<T: PathTreeTypes> PathTree<T>
pub const fn root_node_id(&self) -> NodeId
pub fn root_node(&self) -> &Arc<TreeNode<T>>
pub fn contains_node(&self, id: NodeId) -> bool
pub fn lookup_node(&self, id: NodeId) -> Option<&Arc<TreeNode<T>>>
sourcepub fn find_node(&self, path: &T::RootPath) -> Option<&Arc<TreeNode<T>>>
pub fn find_node(&self, path: &T::RootPath) -> Option<&Arc<TreeNode<T>>>
Find a node by its path.
sourcepub fn resolve_node_path(
&self,
path: &T::RootPath,
match_path: MatchNodePath
) -> Option<ResolvedNodePath<'_, T>>
pub fn resolve_node_path( &self, path: &T::RootPath, match_path: MatchNodePath ) -> Option<ResolvedNodePath<'_, T>>
Find a node by its path.
Returns the found node and the number of resolved path segments.
sourcepub fn insert_or_update_node_value(
&mut self,
path: &T::RootPath,
new_value: NodeValue<T>,
new_inner_value: impl FnMut() -> T::InnerValue,
try_clone_leaf_into_inner_value: impl FnOnce(&T::LeafValue) -> Option<T::InnerValue>
) -> Result<ParentChildTreeNode<T>, InsertOrUpdateNodeValueError<T>>
pub fn insert_or_update_node_value( &mut self, path: &T::RootPath, new_value: NodeValue<T>, new_inner_value: impl FnMut() -> T::InnerValue, try_clone_leaf_into_inner_value: impl FnOnce(&T::LeafValue) -> Option<T::InnerValue> ) -> Result<ParentChildTreeNode<T>, InsertOrUpdateNodeValueError<T>>
Insert or update a node in the tree.
All missing parent nodes are created recursively and initialized
with the value returned by new_inner_value
.
If the parent node exists and is a leaf node then it is replaced
with an inner node by calling try_clone_leaf_into_inner_value
.
Returns the updated parent node and the inserted/updated child node.
The parent node is None
if the root node has been updated.
In case of an error, the new value is returned back to the caller.
sourcepub fn insert_or_update_child_node_value(
&mut self,
parent_node: &Arc<TreeNode<T>>,
child_path_segment: &<T as PathTreeTypes>::PathSegmentRef,
new_value: NodeValue<T>
) -> Result<ParentChildTreeNode<T>, InsertOrUpdateNodeValueError<T>>
pub fn insert_or_update_child_node_value( &mut self, parent_node: &Arc<TreeNode<T>>, child_path_segment: &<T as PathTreeTypes>::PathSegmentRef, new_value: NodeValue<T> ) -> Result<ParentChildTreeNode<T>, InsertOrUpdateNodeValueError<T>>
Insert or update a child node in the tree.
The parent node must exist and it must be an inner node.
Returns the updated parent node and the inserted/updated child node.
In case of an error, the new value is returned back to the caller.
sourcepub fn remove_subtree(&mut self, node_id: NodeId) -> Option<RemovedSubtree<T>>
pub fn remove_subtree(&mut self, node_id: NodeId) -> Option<RemovedSubtree<T>>
Remove a node and its children from the tree.
Removes the entire subtree rooted at the given node.
The root node cannot be removed.
Returns the ID of the parent node and the IDs of the removed nodes.
sourcepub fn retain_nodes(&mut self, predicate: impl FnMut(&TreeNode<T>) -> bool)
pub fn retain_nodes(&mut self, predicate: impl FnMut(&TreeNode<T>) -> bool)
Retain only the nodes that match the given predicate.
Returns the number of nodes that have been removed.
sourcepub fn nodes(&self) -> impl Iterator<Item = &Arc<TreeNode<T>>>
pub fn nodes(&self) -> impl Iterator<Item = &Arc<TreeNode<T>>>
All nodes in no particular order.
sourcepub fn node_count(&self) -> usize
pub fn node_count(&self) -> usize
Total number of nodes in the tree.
sourcepub fn ancestor_nodes(
&self,
id: NodeId
) -> impl Iterator<Item = HalfEdgeTreeNodeRef<'_, T>> + Clone
pub fn ancestor_nodes( &self, id: NodeId ) -> impl Iterator<Item = HalfEdgeTreeNodeRef<'_, T>> + Clone
Iterator over all ancestor nodes of the given node.
Returns the node and the respective path segment from the child node.
sourcepub fn count_ancestor_nodes(&self, id: NodeId) -> Option<usize>
pub fn count_ancestor_nodes(&self, id: NodeId) -> Option<usize>
The number of parent nodes of the given node up to the root node.
Returns None
if the given node is not found.
sourcepub fn count_descendant_nodes(&self, id: NodeId) -> Option<usize>
pub fn count_descendant_nodes(&self, id: NodeId) -> Option<usize>
Number of child nodes of the given node (recursively).
Returns None
if the given node is not found.