mirror of
https://github.com/cberner/raptorq.git
synced 2024-06-28 09:41:41 +00:00
Make EncodingPacket public
This commit is contained in:
parent
978f25fe87
commit
91c6745257
22
src/base.rs
22
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<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;
|
||||
|
Loading…
Reference in New Issue
Block a user