MCPcopy Create free account
hub / github.com/carsonpo/haystackdb / get_range_node

Method get_range_node

src/structures/mmap_tree.rs:217–267  ·  view source on GitHub ↗
(
        &mut self,
        node_offset: usize,
        start: K,
        end: K,
        result: &mut Vec<(K, V)>,
    )

Source from the content-addressed store, hash-verified

215 }
216
217 fn get_range_node(
218 &mut self,
219 node_offset: usize,
220 start: K,
221 end: K,
222 result: &mut Vec<(K, V)>,
223 ) -> Result<(), io::Error> {
224 let node = self.storage_manager.load_node(node_offset)?;
225
226 match node.node_type {
227 NodeType::Internal => {
228 let mut idx = node
229 .keys
230 .binary_search(&start.clone())
231 .unwrap_or_else(|x| x);
232 if idx == node.keys.len() {
233 idx -= 1;
234 }
235
236 self.get_range_node(node.children[idx], start.clone(), end.clone(), result)?;
237
238 while idx < node.keys.len() && node.keys[idx] < end {
239 self.get_range_node(
240 node.children[idx + 1],
241 start.clone(),
242 end.clone(),
243 result,
244 )?;
245 idx += 1;
246 }
247 }
248 NodeType::Leaf => {
249 let mut idx = node.keys.binary_search(&start).unwrap_or_else(|x| x);
250 if node.keys.len() == 0 {
251 return Ok(());
252 }
253 if idx == node.keys.len() {
254 idx -= 1;
255 }
256
257 while idx < node.keys.len() && node.keys[idx] < end {
258 if node.keys[idx] >= start {
259 result.push((node.keys[idx].clone(), node.values[idx].clone().unwrap()));
260 }
261 idx += 1;
262 }
263 }
264 }
265
266 Ok(())
267 }
268
269 pub fn batch_insert(&mut self, entries: Vec<(K, V)>) -> Result<(), io::Error> {
270 if entries.is_empty() {

Callers 1

get_rangeMethod · 0.80

Calls 4

load_nodeMethod · 0.80
cloneMethod · 0.80
lenMethod · 0.80
pushMethod · 0.80

Tested by

no test coverage detected