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

Method iter_changes

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

Source from the content-addressed store, hash-verified

58 }
59
60 fn iter_changes(
61 &self,
62 view: &ViewState,
63 from_seq: u64,
64 ) -> PristineResult<Box<dyn Iterator<Item = Result<(u64, NodeId, Merkle), PristineError>> + '_>>
65 {
66 let changes_table = self.txn.open_table(VIEW_CHANGES)?;
67 let tags_table = self.txn.open_table(MERKLE_CHAIN)?;
68
69 let view_id = view.id;
70 let start_key = encode_view_seq(view_id, from_seq);
71 let end_key = encode_view_seq(view_id, u64::MAX);
72
73 let mut results = Vec::new();
74 for result in changes_table.range::<&[u8; 16]>(&start_key..=&end_key)? {
75 match result {
76 Ok((key, value)) => {
77 let (_, seq) = decode_view_seq(key.value());
78 let change_id = NodeId::new(value.value());
79
80 let tag_key = encode_view_seq(view_id, seq);
81 let merkle = match tags_table.get(&tag_key) {
82 Ok(Some(m)) => Merkle::from_bytes(*m.value()),
83 _ => Merkle::ZERO,
84 };
85
86 results.push(Ok((seq, change_id, merkle)));
87 }
88 Err(e) => {
89 results.push(Err(PristineError::Storage(Box::new(e))));
90 }
91 }
92 }
93
94 Ok(Box::new(results.into_iter()))
95 }
96}

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