Use VecDeque in places

The unwrap()'s are all after checks to make sure the value should never be None.
This commit is contained in:
Deirdre Connolly 2020-10-03 22:34:55 -04:00 committed by Deirdre Connolly
parent d6cac9ea0a
commit 0cf24be8e0
1 changed files with 7 additions and 6 deletions

View File

@ -12,7 +12,7 @@
#![allow(clippy::unit_arg)] #![allow(clippy::unit_arg)]
#![allow(dead_code)] #![allow(dead_code)]
use std::fmt; use std::{collections::VecDeque, fmt};
use byteorder::{BigEndian, ByteOrder}; use byteorder::{BigEndian, ByteOrder};
use lazy_static::lazy_static; use lazy_static::lazy_static;
@ -126,18 +126,19 @@ impl From<Vec<NoteCommitment>> for NoteCommitmentTree {
let count = values.len() as u32; let count = values.len() as u32;
let mut height = 0u8; 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 { while usize::from(height) < MERKLE_DEPTH {
let mut next_layer_up = vec![]; let mut next_layer_up = vec![];
while !current_layer.is_empty() { while !current_layer.is_empty() {
let left = current_layer.remove(0); let left = current_layer.pop_front().unwrap();
let right; let right;
if current_layer.is_empty() { if current_layer.is_empty() {
right = EMPTY_ROOTS[height as usize]; right = EMPTY_ROOTS[height as usize];
} else { } else {
right = current_layer.remove(0); right = current_layer.pop_front().unwrap();
} }
let node = merkle_crh_sprout(left, right); let node = merkle_crh_sprout(left, right);
@ -145,13 +146,13 @@ impl From<Vec<NoteCommitment>> for NoteCommitmentTree {
} }
height += 1; height += 1;
current_layer = next_layer_up; current_layer = next_layer_up.into();
} }
assert!(current_layer.len() == 1); assert!(current_layer.len() == 1);
NoteCommitmentTree { NoteCommitmentTree {
root: Root(current_layer.remove(0)), root: Root(current_layer.pop_front().unwrap()),
height, height,
count, count,
} }