Remove From and Into for Octet

This commit is contained in:
Christopher Berner 2019-02-07 19:06:08 -08:00
parent 5fe8ac022d
commit e9dec4b6c8
4 changed files with 17 additions and 31 deletions

@ -14,7 +14,7 @@ use raptorq::Symbol;
fn criterion_benchmark(c: &mut Criterion) {
Octet::static_init();
let octet1 = Octet::from(rand::thread_rng().gen_range(1, 255));
let octet1 = Octet::new(rand::thread_rng().gen_range(1, 255));
let symbol_size = 512;
let mut data1: Vec<u8> = vec![0; symbol_size];
let mut data2: Vec<u8> = vec![0; symbol_size];

@ -34,7 +34,7 @@ fn generate_mt(H: usize, Kprime: usize, S: usize) -> OctetMatrix {
for j in 0..=(Kprime + S - 2) {
if i == rand((j + 1) as u32, 6, H as u32) as usize ||
i == ((rand((j + 1) as u32, 6, H as u32) + rand((j + 1) as u32, 7, (H - 1) as u32) + 1) % (H as u32)) as usize {
matrix.set(i, j, 1.into());
matrix.set(i, j, Octet::one());
}
}
matrix.set(i, Kprime + S - 1, Octet::alpha(i as u8));
@ -100,25 +100,25 @@ pub fn generate_constraint_matrix<T:Iterator<Item=u32>>(source_block_symbols: u3
let a = 1 + i / S;
let b = i % S;
matrix.set(b, i, 1.into());
matrix.set(b, i, Octet::one());
let b = (b + a) % S;
matrix.set(b, i, 1.into());
matrix.set(b, i, Octet::one());
let b = (b + a) % S;
matrix.set(b, i, 1.into());
matrix.set(b, i, Octet::one());
}
// I_S
for i in 0..S {
matrix.set(i as usize, i + B as usize, 1.into());
matrix.set(i as usize, i + B as usize, Octet::one());
}
// G_LDPC,2
// See section 5.3.3.3
for i in 0..S {
matrix.set(i, (i % P) + W, 1.into());
matrix.set(i, ((i + 1) % P) + W, 1.into());
matrix.set(i, (i % P) + W, Octet::one());
matrix.set(i, ((i + 1) % P) + W, Octet::one());
}
// G_HDPC
@ -131,7 +131,7 @@ pub fn generate_constraint_matrix<T:Iterator<Item=u32>>(source_block_symbols: u3
// I_H
for i in 0..H {
matrix.set(i + S as usize, i + (Kprime + S) as usize, 1.into());
matrix.set(i + S as usize, i + (Kprime + S) as usize, Octet::one());
}
// G_ENC
@ -141,7 +141,7 @@ pub fn generate_constraint_matrix<T:Iterator<Item=u32>>(source_block_symbols: u3
let tuple = intermediate_tuple(Kprime as u32, i);
for j in enc_indices(Kprime as u32, tuple) {
matrix.set(row as usize + S + H, j, 1.into());
matrix.set(row as usize + S + H, j, Octet::one());
}
row += 1;
}

@ -13,7 +13,7 @@ impl OctetMatrix {
pub fn new(height: usize, width: usize) -> OctetMatrix {
let mut elements: Vec<Vec<Octet>> = vec![];
for _ in 0..height {
elements.push(vec![0.into(); width]);
elements.push(vec![Octet::zero(); width]);
}
OctetMatrix {
height,
@ -74,9 +74,9 @@ impl OctetMatrix {
let mut intermediate = self.elements.clone();
for i in 0..self.height {
for _ in 0..self.width {
intermediate[i].push(0.into());
intermediate[i].push(Octet::zero());
}
intermediate[i][self.width + i] = 1.into();
intermediate[i][self.width + i] = Octet::one();
}
// Convert to row echelon form
@ -95,8 +95,8 @@ impl OctetMatrix {
}
// Scale leading coefficient to 1
if intermediate[i][i] != 1.into() {
let element_inverse = Octet::from(1) / intermediate[i][i].clone();
if intermediate[i][i] != Octet::one() {
let element_inverse = Octet::one() / intermediate[i][i].clone();
for j in i..(2*self.width) {
intermediate[i][j] = intermediate[i][j].clone() * element_inverse.clone();
}

@ -152,20 +152,6 @@ impl Octet {
}
}
impl From<u8> for Octet {
fn from(value: u8) -> Octet {
Octet {
value
}
}
}
impl Into<u8> for Octet {
fn into(self) -> u8 {
self.value
}
}
impl Add for Octet {
type Output = Octet;
@ -340,8 +326,8 @@ mod tests {
let mut fma_result = Octet::zero();
for i in 0..255 {
for j in 0..255 {
result += Octet::from(i) * Octet::from(j);
fma_result.fma(&Octet::from(i), &Octet::from(j));
result += Octet::new(i) * Octet::new(j);
fma_result.fma(&Octet::new(i), &Octet::new(j));
assert_eq!(result, fma_result);
}
}