From 0cf24be8e068a9861eb978a5622b8be5b80cfa6b Mon Sep 17 00:00:00 2001 From: Deirdre Connolly Date: Sat, 3 Oct 2020 22:34:55 -0400 Subject: [PATCH] Use VecDeque in places The unwrap()'s are all after checks to make sure the value should never be None. --- zebra-chain/src/sprout/tree.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/zebra-chain/src/sprout/tree.rs b/zebra-chain/src/sprout/tree.rs index b24df603f..31ca23648 100644 --- a/zebra-chain/src/sprout/tree.rs +++ b/zebra-chain/src/sprout/tree.rs @@ -12,7 +12,7 @@ #![allow(clippy::unit_arg)] #![allow(dead_code)] -use std::fmt; +use std::{collections::VecDeque, fmt}; use byteorder::{BigEndian, ByteOrder}; use lazy_static::lazy_static; @@ -126,18 +126,19 @@ impl From> for NoteCommitmentTree { let count = values.len() as u32; let mut height = 0u8; - let mut current_layer: Vec<[u8; 32]> = values.into_iter().map(|cm| cm.into()).collect(); + let mut current_layer: VecDeque<[u8; 32]> = + values.into_iter().map(|cm| cm.into()).collect(); while usize::from(height) < MERKLE_DEPTH { let mut next_layer_up = vec![]; while !current_layer.is_empty() { - let left = current_layer.remove(0); + let left = current_layer.pop_front().unwrap(); let right; if current_layer.is_empty() { right = EMPTY_ROOTS[height as usize]; } else { - right = current_layer.remove(0); + right = current_layer.pop_front().unwrap(); } let node = merkle_crh_sprout(left, right); @@ -145,13 +146,13 @@ impl From> for NoteCommitmentTree { } height += 1; - current_layer = next_layer_up; + current_layer = next_layer_up.into(); } assert!(current_layer.len() == 1); NoteCommitmentTree { - root: Root(current_layer.remove(0)), + root: Root(current_layer.pop_front().unwrap()), height, count, }