MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / find_block_end_in_inode

Method find_block_end_in_inode

atomic-core/src/pristine/txn/read.rs:1650–1697  ·  view source on GitHub ↗
(
        &self,
        inode: Inode,
        pos: Position<NodeId>,
    )

Source from the content-addressed store, hash-verified

1648 }
1649
1650 fn find_block_end_in_inode(
1651 &self,
1652 inode: Inode,
1653 pos: Position<NodeId>,
1654 ) -> Result<Option<GraphNode<NodeId>>, Self::InodeError> {
1655 let table = &self.inode_graph_table;
1656 let inode_id = inode.get();
1657 let change_id = pos.change.get();
1658 let target_pos = pos.pos.get();
1659
1660 // Check for empty vertex at exact position
1661 let empty_key = encode_inode_vertex(inode_id, change_id, target_pos, target_pos);
1662 if table.get(&empty_key)?.next().is_some() {
1663 return Ok(Some(GraphNode {
1664 change: NodeId::new(change_id),
1665 start: ChangePosition::new(target_pos),
1666 end: ChangePosition::new(target_pos),
1667 }));
1668 }
1669
1670 // Scan for vertex ending at this position
1671 let start_key = encode_inode_vertex(inode_id, change_id, 0, 0);
1672 let end_key = encode_inode_vertex(inode_id, change_id, target_pos, u64::MAX);
1673
1674 for result in table.range::<&[u8; 32]>(&start_key..=&end_key)? {
1675 let (key, _) = result?;
1676 let (_, v_change, v_start, v_end) = decode_inode_vertex(key.value());
1677 if v_change != change_id {
1678 continue;
1679 }
1680 if v_end == target_pos && v_start < v_end {
1681 return Ok(Some(GraphNode {
1682 change: NodeId::new(v_change),
1683 start: ChangePosition::new(v_start),
1684 end: ChangePosition::new(v_end),
1685 }));
1686 }
1687 if v_start <= target_pos && target_pos < v_end {
1688 return Ok(Some(GraphNode {
1689 change: NodeId::new(v_change),
1690 start: ChangePosition::new(v_start),
1691 end: ChangePosition::new(v_end),
1692 }));
1693 }
1694 }
1695
1696 Ok(None)
1697 }
1698
1699 fn count_inode_vertices(&self, inode: Inode) -> Result<usize, Self::InodeError> {
1700 let table = &self.inode_graph_table;

Callers 1

find_endMethod · 0.45

Calls 4

encode_inode_vertexFunction · 0.85
decode_inode_vertexFunction · 0.85
getMethod · 0.65
nextMethod · 0.45

Tested by

no test coverage detected