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

Method iter_changes

atomic-core/src/pristine/txn/read.rs:365–401  ·  view source on GitHub ↗
(
        &self,
        view: &ViewState,
        from_seq: u64,
    )

Source from the content-addressed store, hash-verified

363 }
364
365 fn iter_changes(
366 &self,
367 view: &ViewState,
368 from_seq: u64,
369 ) -> PristineResult<Box<dyn Iterator<Item = Result<(u64, NodeId, Merkle), PristineError>> + '_>>
370 {
371 let changes_table = self.txn.open_table(VIEW_CHANGES)?;
372 let tags_table = self.txn.open_table(MERKLE_CHAIN)?;
373
374 let view_id = view.id;
375 let start_key = encode_view_seq(view_id, from_seq);
376 let end_key = encode_view_seq(view_id, u64::MAX);
377
378 // Collect into a Vec to avoid lifetime issues
379 let mut results = Vec::new();
380 for result in changes_table.range::<&[u8; 16]>(&start_key..=&end_key)? {
381 match result {
382 Ok((key, value)) => {
383 let (_, seq) = decode_view_seq(key.value());
384 let change_id = NodeId::new(value.value());
385
386 let tag_key = encode_view_seq(view_id, seq);
387 let merkle = match tags_table.get(&tag_key) {
388 Ok(Some(m)) => Merkle::from_bytes(*m.value()),
389 _ => Merkle::ZERO,
390 };
391
392 results.push(Ok((seq, change_id, merkle)));
393 }
394 Err(e) => {
395 results.push(Err(PristineError::Storage(Box::new(e))));
396 }
397 }
398 }
399
400 Ok(Box::new(results.into_iter()))
401 }
402}
403
404// TreeTxnT Implementation

Callers

nothing calls this directly

Calls 5

encode_view_seqFunction · 0.85
decode_view_seqFunction · 0.85
getMethod · 0.65
pushMethod · 0.45
into_iterMethod · 0.45

Tested by

no test coverage detected