Optimize decoder to do less memory allocation

Improve decoder repair perf by ~15%
This commit is contained in:
Christopher Berner 2019-02-13 22:04:31 -08:00
parent 1831b7d97f
commit 8622195e32
2 changed files with 4 additions and 5 deletions

@ -17,9 +17,8 @@ fn main() {
}
let mut junk = 0;
let encode_data = data.clone();
for _ in 0..5000 {
let encoder = SourceBlockEncoder::new(1, symbol_size, &encode_data);
let encoder = SourceBlockEncoder::new(1, symbol_size, &data);
let packets = encoder.repair_packets(0, 1);
junk += packets[0].symbol.bytes()[0] as u32;
}

@ -84,7 +84,7 @@ impl SourceBlockDecoder {
}
// TODO: support extra repair symbols, that would make matrix non-square
for repair_packet in self.repair_packets.clone() {
for repair_packet in self.repair_packets.iter() {
if encoded_indices.len() as u32 == num_extended_symbols {
break;
}
@ -106,7 +106,7 @@ impl SourceBlockDecoder {
result.extend(self.source_symbols[i].clone().unwrap().bytes())
}
else {
let rebuilt = self.rebuild_source_symbol(intermediate_symbols.clone(), i as u32);
let rebuilt = self.rebuild_source_symbol(&intermediate_symbols, i as u32);
result.extend(rebuilt.bytes());
}
}
@ -116,7 +116,7 @@ impl SourceBlockDecoder {
None
}
fn rebuild_source_symbol(&self, intermediate_symbols: Vec<Symbol>, source_symbol_id: u32) -> Symbol {
fn rebuild_source_symbol(&self, intermediate_symbols: &Vec<Symbol>, source_symbol_id: u32) -> Symbol {
let tuple = intermediate_tuple(self.source_block_symbols, source_symbol_id);
let mut rebuilt = Symbol::zero(self.symbol_size as usize);