feat: implement iterator over key-value pairs for TSMT
Bobbin Threadbare bobbinth@protonmail.com
Tue, 01 Aug 2023 11:02:29 -0700
2 files changed,
11 insertions(+),
0 deletions(-)
M
src/merkle/tiered_smt/mod.rs
→
src/merkle/tiered_smt/mod.rs
@@ -214,6 +214,11 @@
// ITERATORS // -------------------------------------------------------------------------------------------- + /// Returns an iterator over all key-value pairs in this [TieredSmt]. + pub fn iter(&self) -> impl Iterator<Item = &(RpoDigest, Word)> { + self.values.iter() + } + /// Returns an iterator over all inner nodes of this [TieredSmt] (i.e., nodes not at depths 16 /// 32, 48, or 64). ///@@ -230,6 +235,7 @@ pub fn upper_leaves(&self) -> impl Iterator<Item = (RpoDigest, RpoDigest, Word)> + '_ {
self.nodes.upper_leaves().map(|(index, node)| { let key_prefix = index_to_prefix(index); let (key, value) = self.values.get_first(key_prefix).expect("upper leaf not found"); + debug_assert_eq!(key_to_index(key, index.depth()), *index); (*node, *key, *value) }) }
M
src/merkle/tiered_smt/values.rs
→
src/merkle/tiered_smt/values.rs
@@ -108,6 +108,11 @@
None } + /// Returns an iterator over all key-value pairs in this store. + pub fn iter(&self) -> impl Iterator<Item = &(RpoDigest, Word)> { + self.values.iter().flat_map(|(_, entry)| entry.iter()) + } + // STATE MUTATORS // --------------------------------------------------------------------------------------------