(
&self,
inode: Inode,
pos: Position<NodeId>,
)
| 1822 | } |
| 1823 | |
| 1824 | fn find_block_end_in_inode( |
| 1825 | &self, |
| 1826 | inode: Inode, |
| 1827 | pos: Position<NodeId>, |
| 1828 | ) -> Result<Option<GraphNode<NodeId>>, Self::InodeError> { |
| 1829 | let table = &self.inode_graph_table; |
| 1830 | let inode_id = inode.get(); |
| 1831 | let change_id = pos.change.get(); |
| 1832 | let target_pos = pos.pos.get(); |
| 1833 | |
| 1834 | // Check for empty vertex at exact position |
| 1835 | let empty_key = encode_inode_vertex(inode_id, change_id, target_pos, target_pos); |
| 1836 | if table.get(&empty_key)?.next().is_some() { |
| 1837 | return Ok(Some(GraphNode { |
| 1838 | change: NodeId::new(change_id), |
| 1839 | start: ChangePosition::new(target_pos), |
| 1840 | end: ChangePosition::new(target_pos), |
| 1841 | })); |
| 1842 | } |
| 1843 | |
| 1844 | // Scan for vertex ending at this position |
| 1845 | let start_key = encode_inode_vertex(inode_id, change_id, 0, 0); |
| 1846 | let end_key = encode_inode_vertex(inode_id, change_id, target_pos, u64::MAX); |
| 1847 | |
| 1848 | for result in table.range::<&[u8; 32]>(&start_key..=&end_key)? { |
| 1849 | let (key, _) = result?; |
| 1850 | let (_, v_change, v_start, v_end) = decode_inode_vertex(key.value()); |
| 1851 | if v_change != change_id { |
| 1852 | continue; |
| 1853 | } |
| 1854 | if v_end == target_pos && v_start < v_end { |
| 1855 | return Ok(Some(GraphNode { |
| 1856 | change: NodeId::new(v_change), |
| 1857 | start: ChangePosition::new(v_start), |
| 1858 | end: ChangePosition::new(v_end), |
| 1859 | })); |
| 1860 | } |
| 1861 | if v_start <= target_pos && target_pos < v_end { |
| 1862 | return Ok(Some(GraphNode { |
| 1863 | change: NodeId::new(v_change), |
| 1864 | start: ChangePosition::new(v_start), |
| 1865 | end: ChangePosition::new(v_end), |
| 1866 | })); |
| 1867 | } |
| 1868 | } |
| 1869 | |
| 1870 | Ok(None) |
| 1871 | } |
| 1872 | |
| 1873 | fn count_inode_vertices(&self, inode: Inode) -> Result<usize, Self::InodeError> { |
| 1874 | let table = &self.inode_graph_table; |
no test coverage detected