pub struct DocumentTree { /* private fields */ }Expand description
A hierarchical document tree structure.
Uses an arena-based tree representation for efficient traversal and node manipulation.
Implementations§
Source§impl DocumentTree
impl DocumentTree
Sourcepub fn from_raw(arena: Arena<TreeNode>, root_id: NodeId) -> Self
pub fn from_raw(arena: Arena<TreeNode>, root_id: NodeId) -> Self
Create a document tree from an existing arena and root ID.
This is useful for deserialization and testing.
Sourcepub fn get(&self, id: NodeId) -> Option<&TreeNode>
pub fn get(&self, id: NodeId) -> Option<&TreeNode>
Get a node by its ID.
Returns None if the node doesn’t exist.
Sourcepub fn get_mut(&mut self, id: NodeId) -> Option<&mut TreeNode>
pub fn get_mut(&mut self, id: NodeId) -> Option<&mut TreeNode>
Get a mutable reference to a node by its ID.
Returns None if the node doesn’t exist.
Sourcepub fn add_child(
&mut self,
parent: NodeId,
title: &str,
content: &str,
) -> NodeId
pub fn add_child( &mut self, parent: NodeId, title: &str, content: &str, ) -> NodeId
Add a child node to the specified parent.
Returns the ID of the newly created child node. The structure is automatically calculated based on siblings.
Sourcepub fn add_child_with_pages(
&mut self,
parent: NodeId,
title: &str,
content: &str,
start_page: usize,
end_page: usize,
) -> NodeId
pub fn add_child_with_pages( &mut self, parent: NodeId, title: &str, content: &str, start_page: usize, end_page: usize, ) -> NodeId
Add a child node with page boundaries.
Returns the ID of the newly created child node.
Sourcepub fn child_count(&self, id: NodeId) -> usize
pub fn child_count(&self, id: NodeId) -> usize
Get the number of children of a node.
This is more efficient than children().len() as it doesn’t allocate.
Sourcepub fn children_iter(&self, id: NodeId) -> impl Iterator<Item = NodeId> + '_
pub fn children_iter(&self, id: NodeId) -> impl Iterator<Item = NodeId> + '_
Get the children of a node as an iterator.
Use this instead of children() when you only need to iterate,
as it avoids allocating a Vec.
Sourcepub fn children(&self, id: NodeId) -> Vec<NodeId>
pub fn children(&self, id: NodeId) -> Vec<NodeId>
Get the children of a node.
Returns a Vec for cases where you need owned access to the children.
Consider using children_iter() if you only need to iterate.
Sourcepub fn parent(&self, id: NodeId) -> Option<NodeId>
pub fn parent(&self, id: NodeId) -> Option<NodeId>
Get the parent of a node.
Returns None if the node is the root or doesn’t have a parent.
Sourcepub fn siblings_iter(&self, id: NodeId) -> impl Iterator<Item = NodeId> + '_
pub fn siblings_iter(&self, id: NodeId) -> impl Iterator<Item = NodeId> + '_
Get the siblings of a node (excluding the node itself).
Returns an empty iterator for the root node.
Sourcepub fn ancestors_iter(&self, id: NodeId) -> impl Iterator<Item = NodeId> + '_
pub fn ancestors_iter(&self, id: NodeId) -> impl Iterator<Item = NodeId> + '_
Get the ancestors of a node from parent to root.
Returns an empty iterator for the root node.
Sourcepub fn path_from_root(&self, id: NodeId) -> Vec<NodeId>
pub fn path_from_root(&self, id: NodeId) -> Vec<NodeId>
Get the path from root to a node (inclusive).
Returns the path as a Vec starting from the root.
Sourcepub fn first_child(&self, id: NodeId) -> Option<NodeId>
pub fn first_child(&self, id: NodeId) -> Option<NodeId>
Get the first child of a node.
Returns None if the node has no children.
Sourcepub fn last_child(&self, id: NodeId) -> Option<NodeId>
pub fn last_child(&self, id: NodeId) -> Option<NodeId>
Get the last child of a node.
Returns None if the node has no children.
Sourcepub fn leaves(&self) -> Vec<NodeId>
pub fn leaves(&self) -> Vec<NodeId>
Get all leaf nodes in the tree.
Uses cached leaves if available, otherwise rebuilds the cache.
Sourcepub fn rebuild_leaves_cache(&mut self)
pub fn rebuild_leaves_cache(&mut self)
Rebuild the leaves cache.
Call this after deserialization or batch modifications.
Sourcepub fn invalidate_leaves_cache(&mut self)
pub fn invalidate_leaves_cache(&mut self)
Invalidate the leaves cache.
Called automatically by mutation methods.
Sourcepub fn node_count(&self) -> usize
pub fn node_count(&self) -> usize
Get the number of nodes in the tree.
Sourcepub fn set_summary(&mut self, id: NodeId, summary: &str)
pub fn set_summary(&mut self, id: NodeId, summary: &str)
Update a node’s summary.
Sourcepub fn set_content(&mut self, id: NodeId, content: &str)
pub fn set_content(&mut self, id: NodeId, content: &str)
Update a node’s content.
Sourcepub fn set_structure(&mut self, id: NodeId, structure: &str)
pub fn set_structure(&mut self, id: NodeId, structure: &str)
Update a node’s structure index.
Sourcepub fn set_page_boundaries(&mut self, id: NodeId, start: usize, end: usize)
pub fn set_page_boundaries(&mut self, id: NodeId, start: usize, end: usize)
Set page boundaries for a node.
Sourcepub fn set_line_indices(&mut self, id: NodeId, start: usize, end: usize)
pub fn set_line_indices(&mut self, id: NodeId, start: usize, end: usize)
Set line indices for a node.
Sourcepub fn contains_page(&self, id: NodeId, page: usize) -> bool
pub fn contains_page(&self, id: NodeId, page: usize) -> bool
Check if a node contains a specific page.
Sourcepub fn find_by_structure(&self, structure: &str) -> Option<NodeId>
pub fn find_by_structure(&self, structure: &str) -> Option<NodeId>
Find a node by its structure index.
This is a convenience method that builds an index if needed. For repeated queries, build a RetrievalIndex once.
Sourcepub fn find_by_page(&self, page: usize) -> Option<NodeId>
pub fn find_by_page(&self, page: usize) -> Option<NodeId>
Find the most specific node containing a page.
This is a convenience method that builds an index if needed. For repeated queries, build a RetrievalIndex once.
Sourcepub fn find_nodes_by_page_range(&self, start: usize, end: usize) -> Vec<NodeId>
pub fn find_nodes_by_page_range(&self, start: usize, end: usize) -> Vec<NodeId>
Get all nodes whose page range overlaps with the given range.
Sourcepub fn set_node_id(&mut self, id: NodeId, node_id: &str)
pub fn set_node_id(&mut self, id: NodeId, node_id: &str)
Set the node ID (identifier string).
Sourcepub fn set_physical_index(&mut self, id: NodeId, index: &str)
pub fn set_physical_index(&mut self, id: NodeId, index: &str)
Set the physical index marker.
Sourcepub fn set_token_count(&mut self, id: NodeId, count: usize)
pub fn set_token_count(&mut self, id: NodeId, count: usize)
Update token count for a node.
Sourcepub fn to_structure_json(&self, doc_name: &str) -> DocumentStructure
pub fn to_structure_json(&self, doc_name: &str) -> DocumentStructure
Export the tree structure to JSON format (PageIndex compatible).
Sourcepub fn build_retrieval_index(&self) -> RetrievalIndex
pub fn build_retrieval_index(&self) -> RetrievalIndex
Build a retrieval index for efficient operations.
This should be called once after the tree is fully constructed. The index provides O(1) access to commonly needed traversal data.
§Example
let tree = /* build tree */;
let index = tree.build_retrieval_index();
// Fast access to leaves
for leaf in index.leaves() {
// process leaf
}
// Fast path lookup
if let Some(path) = index.path_to(node_id) {
// path[0] = root, path[-1] = node_id
}
// Fast structure lookup
if let Some(node) = index.find_by_structure("2.1.3") {
// Found section 2.1.3
}
// Fast page lookup
if let Some(node) = index.find_by_page(42) {
// Found node containing page 42
}Trait Implementations§
Source§impl Clone for DocumentTree
impl Clone for DocumentTree
Source§fn clone(&self) -> DocumentTree
fn clone(&self) -> DocumentTree
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for DocumentTree
impl Debug for DocumentTree
Source§impl Default for DocumentTree
impl Default for DocumentTree
Source§impl<'de> Deserialize<'de> for DocumentTree
impl<'de> Deserialize<'de> for DocumentTree
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for DocumentTree
impl RefUnwindSafe for DocumentTree
impl Send for DocumentTree
impl Sync for DocumentTree
impl Unpin for DocumentTree
impl UnsafeUnpin for DocumentTree
impl UnwindSafe for DocumentTree
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more