From 710bbc673007f3769cf3c2f5b1b85d3197c16e23 Mon Sep 17 00:00:00 2001 From: ljedrz Date: Thu, 22 Oct 2020 16:28:02 +0200 Subject: [PATCH] perf: reduce allocations in Boolean's SignExtend impl Signed-off-by: ljedrz --- gadgets/src/bits/sign_extend.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gadgets/src/bits/sign_extend.rs b/gadgets/src/bits/sign_extend.rs index af0e5c2892..4bdede76d8 100644 --- a/gadgets/src/bits/sign_extend.rs +++ b/gadgets/src/bits/sign_extend.rs @@ -16,6 +16,8 @@ use snarkos_models::gadgets::utilities::boolean::Boolean; +use std::iter; + /// Sign extends an array of bits to the desired length. /// Expects least significant bit first pub trait SignExtend @@ -30,10 +32,10 @@ impl SignExtend for Boolean { fn sign_extend(bits: &[Boolean], length: usize) -> Vec { let msb = bits.last().expect("empty bit list"); let bits_needed = length - bits.len(); - let mut extension = vec![*msb; bits_needed]; - let mut result = Vec::from(bits); - result.append(&mut extension); + let mut result = Vec::with_capacity(length); + result.extend_from_slice(bits); + result.extend(iter::repeat(*msb).take(bits_needed)); result }