From 91c67452572247cea11986429eb7ea62a5aeed00 Mon Sep 17 00:00:00 2001 From: Christopher Berner Date: Wed, 20 Mar 2019 17:45:28 -0700 Subject: [PATCH] Make EncodingPacket public --- src/base.rs | 22 +++++++++++++++++++--- src/bin/encode_benchmark.rs | 2 +- src/decoder.rs | 16 ++++++++-------- src/encoder.rs | 16 ++++++++-------- src/lib.rs | 1 + 5 files changed, 37 insertions(+), 20 deletions(-) diff --git a/src/base.rs b/src/base.rs index 61f35cc..4fe2f35 100644 --- a/src/base.rs +++ b/src/base.rs @@ -1,7 +1,6 @@ use std::cmp::min; use rng::rand; -use symbol::Symbol; use systematic_constants::calculate_p1; use systematic_constants::num_lt_symbols; use systematic_constants::systematic_index; @@ -30,8 +29,25 @@ impl PayloadId { // As defined in section 4.4.2 #[derive(Clone)] pub struct EncodingPacket { - pub payload_id: PayloadId, - pub symbol: Symbol + payload_id: PayloadId, + data: Vec +} + +impl EncodingPacket { + pub fn new(payload_id: PayloadId, data: Vec) -> EncodingPacket { + EncodingPacket { + payload_id, + data + } + } + + pub fn payload_id(&self) -> PayloadId { + self.payload_id.clone() + } + + pub fn data(&self) -> &Vec { + &self.data + } } // As defined in section 3.3.2 and 3.3.3 diff --git a/src/bin/encode_benchmark.rs b/src/bin/encode_benchmark.rs index 154f9e9..4a2822d 100644 --- a/src/bin/encode_benchmark.rs +++ b/src/bin/encode_benchmark.rs @@ -20,7 +20,7 @@ fn main() { for _ in 0..5000 { let encoder = SourceBlockEncoder::new(1, symbol_size, &data); let packets = encoder.repair_packets(0, 1); - junk += packets[0].symbol.bytes()[0] as u32; + junk += packets[0].data()[0] as u32; } println!("{}", junk); } diff --git a/src/decoder.rs b/src/decoder.rs index 5152dd7..ebed5ad 100644 --- a/src/decoder.rs +++ b/src/decoder.rs @@ -41,7 +41,7 @@ impl Decoder { } pub fn decode(&mut self, packet: EncodingPacket) -> Option> { - self.blocks[packet.payload_id.source_block_number as usize].parse(packet); + self.blocks[packet.payload_id().source_block_number as usize].parse(packet); for block in self.blocks.iter() { if !block.is_decoded() { return None; @@ -126,8 +126,8 @@ impl SourceBlockDecoder { } for repair_packet in self.repair_packets.iter() { - encoded_indices.push(repair_packet.payload_id.encoding_symbol_id); - d.push(repair_packet.symbol.clone()); + encoded_indices.push(repair_packet.payload_id().encoding_symbol_id); + d.push(Symbol::new(repair_packet.data().clone())); } let constraint_matrix = generate_constraint_matrix(self.source_block_symbols, &encoded_indices); @@ -156,18 +156,18 @@ impl SourceBlockDecoder { } pub fn parse(& mut self, packet: EncodingPacket) -> Option> { - assert_eq!(self.source_block_id, packet.payload_id.source_block_number); + assert_eq!(self.source_block_id, packet.payload_id().source_block_number); let num_extended_symbols = extended_source_block_symbols(self.source_block_symbols); - if self.received_esi.insert(packet.payload_id.encoding_symbol_id) { - if packet.payload_id.encoding_symbol_id >= num_extended_symbols { + if self.received_esi.insert(packet.payload_id().encoding_symbol_id) { + if packet.payload_id().encoding_symbol_id >= num_extended_symbols { // Repair symbol self.repair_packets.push(packet); } else { // Check that this is not an extended symbol (which aren't explicitly sent) - assert!(packet.payload_id.encoding_symbol_id < self.source_block_symbols); + assert!(packet.payload_id().encoding_symbol_id < self.source_block_symbols); // Source symbol - self.source_symbols[packet.payload_id.encoding_symbol_id as usize] = Some(packet.symbol); + self.source_symbols[packet.payload_id().encoding_symbol_id as usize] = Some(Symbol::new(packet.data().clone())); self.received_source_symbols += 1; } } diff --git a/src/encoder.rs b/src/encoder.rs index 4faa18c..9b0a2a3 100644 --- a/src/encoder.rs +++ b/src/encoder.rs @@ -102,10 +102,10 @@ impl SourceBlockEncoder { let mut esi: i32 = -1; self.source_symbols.iter().map(|symbol| { esi += 1; - EncodingPacket { - payload_id: PayloadId::new(self.source_block_id, esi as u32).unwrap(), - symbol: symbol.clone() - } + EncodingPacket::new( + PayloadId::new(self.source_block_id, esi as u32).unwrap(), + symbol.bytes().clone() + ) }).collect() } @@ -115,10 +115,10 @@ impl SourceBlockEncoder { let mut result = vec![]; for i in 0..packets { let tuple = intermediate_tuple(self.source_symbols.len() as u32, start_encoding_symbol_id + i); - result.push(EncodingPacket { - payload_id: PayloadId::new(self.source_block_id, start_encoding_symbol_id + i).unwrap(), - symbol: enc(self.source_symbols.len() as u32, &self.intermediate_symbols, tuple) - }); + result.push(EncodingPacket::new( + PayloadId::new(self.source_block_id, start_encoding_symbol_id + i).unwrap(), + enc(self.source_symbols.len() as u32, &self.intermediate_symbols, tuple).bytes().clone() + )); } result } diff --git a/src/lib.rs b/src/lib.rs index 8301530..2796fff 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,6 +16,7 @@ mod encoder; mod decoder; pub use base::PayloadId; +pub use base::EncodingPacket; pub use base::ObjectTransmissionInformation; pub use pi_solver::IntermediateSymbolDecoder; pub use octet::Octet;