Make EncodingPacket public

This commit is contained in:
Christopher Berner 2019-03-20 17:45:28 -07:00
parent 978f25fe87
commit 91c6745257
5 changed files with 37 additions and 20 deletions

@ -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<u8>
}
impl EncodingPacket {
pub fn new(payload_id: PayloadId, data: Vec<u8>) -> EncodingPacket {
EncodingPacket {
payload_id,
data
}
}
pub fn payload_id(&self) -> PayloadId {
self.payload_id.clone()
}
pub fn data(&self) -> &Vec<u8> {
&self.data
}
}
// As defined in section 3.3.2 and 3.3.3

@ -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);
}

@ -41,7 +41,7 @@ impl Decoder {
}
pub fn decode(&mut self, packet: EncodingPacket) -> Option<Vec<u8>> {
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<Vec<u8>> {
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;
}
}

@ -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
}

@ -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;