mirror of
https://github.com/ProvableHQ/leo.git
synced 2024-12-25 11:12:48 +03:00
perf: reduce allocations in Boolean's SignExtend impl
Signed-off-by: ljedrz <ljedrz@gmail.com>
This commit is contained in:
parent
78f98f1f26
commit
710bbc6730
@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
use snarkos_models::gadgets::utilities::boolean::Boolean;
|
use snarkos_models::gadgets::utilities::boolean::Boolean;
|
||||||
|
|
||||||
|
use std::iter;
|
||||||
|
|
||||||
/// Sign extends an array of bits to the desired length.
|
/// Sign extends an array of bits to the desired length.
|
||||||
/// Expects least significant bit first
|
/// Expects least significant bit first
|
||||||
pub trait SignExtend
|
pub trait SignExtend
|
||||||
@ -30,10 +32,10 @@ impl SignExtend for Boolean {
|
|||||||
fn sign_extend(bits: &[Boolean], length: usize) -> Vec<Boolean> {
|
fn sign_extend(bits: &[Boolean], length: usize) -> Vec<Boolean> {
|
||||||
let msb = bits.last().expect("empty bit list");
|
let msb = bits.last().expect("empty bit list");
|
||||||
let bits_needed = length - bits.len();
|
let bits_needed = length - bits.len();
|
||||||
let mut extension = vec![*msb; bits_needed];
|
|
||||||
|
|
||||||
let mut result = Vec::from(bits);
|
let mut result = Vec::with_capacity(length);
|
||||||
result.append(&mut extension);
|
result.extend_from_slice(bits);
|
||||||
|
result.extend(iter::repeat(*msb).take(bits_needed));
|
||||||
|
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user