From 5a479363ff08742ec2cbb79dfc56dbd11ffb1a92 Mon Sep 17 00:00:00 2001 From: NikVolf Date: Thu, 22 Aug 2019 20:35:56 +0300 Subject: [PATCH] new initializer --- src/tree.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/tree.rs b/src/tree.rs index 09fff69..136c9cf 100644 --- a/src/tree.rs +++ b/src/tree.rs @@ -76,7 +76,7 @@ impl Tree { NodeLink::Generated(idx) } - /// Populate tree with plain list of the leaves/nodes. Mostly for test, + /// Populate tree with plain list of the leaves/nodes. Mostly for tests, /// since this `Tree` structure is for partially loaded tree. pub fn populate(loaded: Vec) -> Self { let mut result = Tree::default(); @@ -88,6 +88,27 @@ impl Tree { result } + pub fn new( + length: u32, + stored: Vec<(u32, MMRNode)>, + generated: Vec, + ) -> Self { + let mut result = Tree::default(); + result.stored_count = length; + + for (idx, node) in stored.into_iter() { + result.stored.insert(idx, node); + } + + result.generated_count = generated.len() as u32; + + for (idx, node) in generated.into_iter().enumerate() { + result.generated.insert(idx as u32, node); + } + + result + } + /// Append one leaf to the tree. pub fn append_leaf(&mut self, root: NodeLink, new_leaf: NodeData) -> AppendTransaction {