arnaucube
arnaucube/miden-cryptoPublic Self-hosted repository
feat: implement iterator over key-value pairs for TSMT
Bobbin Threadbare bobbinth@protonmail.com
Tue, 01 Aug 2023 11:02:29 -0700
commit

a03f2b5d5e21df2ea0efdbd91be20aa6a32a060d

parent

1bb75e85dd0dbac075697076e05e90eb2243829f

2 files changed, 11 insertions(+), 0 deletions(-)

jump to
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 // --------------------------------------------------------------------------------------------