From b8b8e4c61ac008f700eb286680f847df006e93ea Mon Sep 17 00:00:00 2001 From: debris Date: Tue, 1 Dec 2015 19:19:16 +0100 Subject: [PATCH 1/3] printing trie --- src/trie.rs | 53 ++++++++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/src/trie.rs b/src/trie.rs index ef87359c3..2680fce5a 100644 --- a/src/trie.rs +++ b/src/trie.rs @@ -146,22 +146,8 @@ pub struct TrieDB { impl fmt::Debug for TrieDB { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { try!(writeln!(f, "[")); - { - let print_indent = | fo: &mut fmt::Formatter, times | { for i in 0..times { write!(fo, " "); }}; - let root_rlp = self.db.lookup(&self.root).expect("Trie root not found!"); - - self.apply_to_all(root_rlp, &mut | node, deepness, index | { - print_indent(f, deepness); - match *node { - Node::Leaf(ref slice, ref value) => { writeln!(f, "{:x}: Leaf {:?}, {:?}", index, slice, value); }, - Node::ExtensionRaw(ref slice, ref item) => { write!(f, "Extension (raw): "); } - Node::ExtensionSha3(ref slice, ref sha3) => { write!(f, "Extension (sha3): "); } - Node::Branch(Some(ref nodes), ref value) => { writeln!(f, "{:x} Branch: ", index); } - _ => { writeln!(f, "node"); } - } - }, 0, 0); - } - + let root_rlp = self.db.lookup(&self.root).expect("Trie root not found!"); + self.fmt_all(root_rlp, f, 0); writeln!(f, "]") } } @@ -197,30 +183,47 @@ impl TrieDB { } } - fn apply_to_all(&self, node: &[u8], f: &mut F, deepness: usize, index: usize) where F: FnMut(&Node, usize, usize) -> () { + fn fmt_indent(&self, f: &mut fmt::Formatter, size: usize) -> fmt::Result { + for i in 0..size { + try!(write!(f, " ")); + } + Ok(()) + } + + fn fmt_all(&self, node: &[u8], f: &mut fmt::Formatter, deepness: usize) -> fmt::Result { let node = Node::decoded(node); match node { - Node::Leaf(_, _) => f(&node, deepness, index), + Node::Leaf(slice, value) => try!(writeln!(f, "Leaf {:?}, {:?}", slice, value.pretty())), Node::ExtensionRaw(_, ref item) => { - f(&node, deepness, index); - self.apply_to_all(item, f, deepness + 1, 0); + self.fmt_indent(f, deepness); + try!(write!(f, "Extension (raw): ")); + self.fmt_all(item, f, deepness + 1); }, Node::ExtensionSha3(_, sha3) => { - f(&node, deepness, index); + self.fmt_indent(f, deepness); + try!(write!(f, "Extension (sha3): ")); let rlp = self.db.lookup(&H256::from_slice(sha3)).expect("sha3 not found!"); - self.apply_to_all(rlp, f, deepness + 1, 0); + self.fmt_all(rlp, f, deepness + 1); }, Node::Branch(Some(ref nodes), ref value) => { - f(&node, deepness, index); + try!(writeln!(f, "Branch: ")); for i in 0..16 { - self.apply_to_all(nodes[i], f, deepness + 1, i); + match Node::decoded(nodes[i]) { + Node::Branch(None, _) => (), + _ => { + self.fmt_indent(f, deepness + 1); + try!(write!(f, "{:x}: ", i)); + self.fmt_all(nodes[i], f, deepness + 1); + } + } } }, // empty n @ Node::Branch(_, _) => { // do nothing } - } + }; + Ok(()) } fn get<'a>(&'a self, key: &NibbleSlice<'a>) -> Option<&'a [u8]> { From 665dfd622e11326ad8bb9d8334a300b1b25d8437 Mon Sep 17 00:00:00 2001 From: debris Date: Tue, 1 Dec 2015 19:20:48 +0100 Subject: [PATCH 2/3] // --- src/trie.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/trie.rs b/src/trie.rs index e696f931a..ca4aeb72a 100644 --- a/src/trie.rs +++ b/src/trie.rs @@ -564,7 +564,7 @@ mod tests { t.insert(&[0x81u8, 0x23], &[0x81u8, 0x23]); println!("trie:"); println!("{:?}", t); - assert!(false); + //assert!(false); } #[test] From 4a71c1266a7511658c3ca89470b81cf811aa0b7d Mon Sep 17 00:00:00 2001 From: debris Date: Tue, 1 Dec 2015 19:24:14 +0100 Subject: [PATCH 3/3] removed build warnings --- src/trie.rs | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/trie.rs b/src/trie.rs index ca4aeb72a..7761aad35 100644 --- a/src/trie.rs +++ b/src/trie.rs @@ -147,7 +147,7 @@ impl fmt::Debug for TrieDB { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { try!(writeln!(f, "[")); let root_rlp = self.db.lookup(&self.root).expect("Trie root not found!"); - self.fmt_all(root_rlp, f, 0); + try!(self.fmt_all(root_rlp, f, 0)); writeln!(f, "]") } } @@ -184,7 +184,7 @@ impl TrieDB { } fn fmt_indent(&self, f: &mut fmt::Formatter, size: usize) -> fmt::Result { - for i in 0..size { + for _ in 0..size { try!(write!(f, " ")); } Ok(()) @@ -195,31 +195,31 @@ impl TrieDB { match node { Node::Leaf(slice, value) => try!(writeln!(f, "Leaf {:?}, {:?}", slice, value.pretty())), Node::ExtensionRaw(_, ref item) => { - self.fmt_indent(f, deepness); + try!(self.fmt_indent(f, deepness)); try!(write!(f, "Extension (raw): ")); - self.fmt_all(item, f, deepness + 1); + try!(self.fmt_all(item, f, deepness + 1)); }, Node::ExtensionSha3(_, sha3) => { - self.fmt_indent(f, deepness); + try!(self.fmt_indent(f, deepness)); try!(write!(f, "Extension (sha3): ")); let rlp = self.db.lookup(&H256::from_slice(sha3)).expect("sha3 not found!"); - self.fmt_all(rlp, f, deepness + 1); + try!(self.fmt_all(rlp, f, deepness + 1)); }, - Node::Branch(Some(ref nodes), ref value) => { + Node::Branch(Some(ref nodes), _) => { try!(writeln!(f, "Branch: ")); for i in 0..16 { match Node::decoded(nodes[i]) { Node::Branch(None, _) => (), _ => { - self.fmt_indent(f, deepness + 1); + try!(self.fmt_indent(f, deepness + 1)); try!(write!(f, "{:x}: ", i)); - self.fmt_all(nodes[i], f, deepness + 1); + try!(self.fmt_all(nodes[i], f, deepness + 1)); } } } }, // empty - n @ Node::Branch(_, _) => { + Node::Branch(_, _) => { // do nothing } }; @@ -244,8 +244,6 @@ impl TrieDB { }, Node::Branch(Some(ref nodes), ref value) => match key.is_empty() { true => Some(value), - // we don't really need to do lookup for nodes[key.at(0)] in db? - // if its empty hash return Nonem without lookup false => self.get_from_node(nodes[key.at(0) as usize], &key.mid(1)) }, _ => None