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

Method iter_changes

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

Source from the content-addressed store, hash-verified

84 }
85
86 fn iter_changes(
87 &self,
88 view: &ViewState,
89 from_seq: u64,
90 ) -> PristineResult<Box<dyn Iterator<Item = Result<(u64, NodeId, Merkle), PristineError>> + '_>>
91 {
92 let changes_table = self.txn.open_table(VIEW_CHANGES)?;
93 let tags_table = self.txn.open_table(MERKLE_CHAIN)?;
94
95 let view_id = view.id;
96 let start_key = encode_view_seq(view_id, from_seq);
97 let end_key = encode_view_seq(view_id, u64::MAX);
98
99 let mut results = Vec::new();
100 for result in changes_table.range::<&[u8; 16]>(&start_key..=&end_key)? {
101 match result {
102 Ok((key, value)) => {
103 let (_, seq) = decode_view_seq(key.value());
104 let change_id = NodeId::new(value.value());
105
106 let tag_key = encode_view_seq(view_id, seq);
107 let merkle = match tags_table.get(&tag_key) {
108 Ok(Some(m)) => Merkle::from_bytes(*m.value()),
109 _ => Merkle::ZERO,
110 };
111
112 results.push(Ok((seq, change_id, merkle)));
113 }
114 Err(e) => {
115 results.push(Err(PristineError::Storage(Box::new(e))));
116 }
117 }
118 }
119
120 Ok(Box::new(results.into_iter()))
121 }
122}

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