(
&self,
inode: Inode,
pos: Position<NodeId>,
)
| 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; |
no test coverage detected