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:1824–1871  ·  view source on GitHub ↗
(
        &self,
        inode: Inode,
        pos: Position<NodeId>,
    )

Source from the content-addressed store, hash-verified

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;

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