From 563c674700e52b6df7e2e4659201b63421aeaa18 Mon Sep 17 00:00:00 2001 From: Jeremy Rubin Date: Wed, 13 Feb 2019 02:41:29 -0800 Subject: [PATCH] refactor: reserve capacity in aggregate (#2568) --- core/src/core/transaction.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/core/src/core/transaction.rs b/core/src/core/transaction.rs index c536d1167..00f45044c 100644 --- a/core/src/core/transaction.rs +++ b/core/src/core/transaction.rs @@ -1000,15 +1000,22 @@ pub fn aggregate(mut txs: Vec) -> Result { } else if txs.len() == 1 { return Ok(txs.pop().unwrap()); } + let mut n_inputs = 0; + let mut n_outputs = 0; + let mut n_kernels = 0; + for tx in txs.iter() { + n_inputs += tx.body.inputs.len(); + n_outputs += tx.body.outputs.len(); + n_kernels += tx.body.kernels.len(); + } - let mut inputs: Vec = vec![]; - let mut outputs: Vec = vec![]; - let mut kernels: Vec = vec![]; + let mut inputs: Vec = Vec::with_capacity(n_inputs); + let mut outputs: Vec = Vec::with_capacity(n_outputs); + let mut kernels: Vec = Vec::with_capacity(n_kernels); // we will sum these together at the end to give us the overall offset for the // transaction - let mut kernel_offsets: Vec = vec![]; - + let mut kernel_offsets: Vec = Vec::with_capacity(txs.len()); for mut tx in txs { // we will sum these later to give a single aggregate offset kernel_offsets.push(tx.offset);