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 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>>>
pub fn find_node(&self, path: &T::RootPath) -> Option<&Arc<TreeNode<T>>>
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 inner default value.
Returns the parent node and the inserted/updated child node. Both require updating the parent node as well.
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 parent_nodes(
&self,
node_id: NodeId
) -> Option<impl Iterator<Item = &Arc<TreeNode<T>>> + '_>
pub fn parent_nodes( &self, node_id: NodeId ) -> Option<impl Iterator<Item = &Arc<TreeNode<T>>> + '_>
All parent nodes of the given node up to the root node.
Returns None
if the given node is not found.
sourcepub fn count_parent_nodes(&self, node_id: NodeId) -> Option<usize>
pub fn count_parent_nodes(&self, node_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_child_nodes_recursively(&self, node_id: NodeId) -> Option<usize>
pub fn count_child_nodes_recursively(&self, node_id: NodeId) -> Option<usize>
Number of child nodes of the given node (recursively).