From a39ff54a7f889c3ae347b7590fd0b9b5744f82cb Mon Sep 17 00:00:00 2001 From: Xavier Lau Date: Tue, 29 Oct 2019 22:35:59 +0800 Subject: [PATCH] optimize: avoid `insert` into `Vec`; use `into_iter` for less dereference (#3102) --- core/src/core/pmmr/pmmr.rs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/core/src/core/pmmr/pmmr.rs b/core/src/core/pmmr/pmmr.rs index 4ec5fbdab..e0ae155fc 100644 --- a/core/src/core/pmmr/pmmr.rs +++ b/core/src/core/pmmr/pmmr.rs @@ -99,10 +99,11 @@ where .filter(|x| *x < peak_pos) .filter_map(|x| self.backend.get_from_file(x)) .collect::>(); - res.reverse(); if let Some(rhs) = rhs { - res.insert(0, rhs); + res.push(rhs); } + res.reverse(); + res } @@ -118,10 +119,10 @@ where .collect::>(); let mut res = None; - for peak in rhs.iter().rev() { + for peak in rhs.into_iter().rev() { res = match res { - None => Some(*peak), - Some(rhash) => Some((*peak, rhash).hash_with_index(self.unpruned_size())), + None => Some(peak), + Some(rhash) => Some((peak, rhash).hash_with_index(self.unpruned_size())), } } res @@ -134,10 +135,10 @@ where return Ok(ZERO_HASH); } let mut res = None; - for peak in self.peaks().iter().rev() { + for peak in self.peaks().into_iter().rev() { res = match res { - None => Some(*peak), - Some(rhash) => Some((*peak, rhash).hash_with_index(self.unpruned_size())), + None => Some(peak), + Some(rhash) => Some((peak, rhash).hash_with_index(self.unpruned_size())), } } res.ok_or_else(|| "no root, invalid tree".to_owned()) @@ -418,7 +419,7 @@ pub fn peaks(num: u64) -> Vec { /// The number of leaves in a MMR of the provided size. pub fn n_leaves(size: u64) -> u64 { let (sizes, height) = peak_sizes_height(size); - let nleaves = sizes.iter().map(|n| (n + 1) / 2 as u64).sum(); + let nleaves = sizes.into_iter().map(|n| (n + 1) / 2 as u64).sum(); if height == 0 { nleaves } else {