pub const MAX_INACTIVE_NUM: usize = 100;
pub type DegreeSetFn = Box<dyn FnMut(usize) -> (Vec<usize>, Vec<usize>)>;
#[derive(Clone, Debug)]
pub struct CodeParams {
pub k: usize,
pub a: usize,
pub b: usize,
pub l: usize,
pub h: usize,
}
impl CodeParams {
pub fn new(k: usize, a: usize, l: usize, h: usize) -> Self {
let b = k - a;
Self { k, a, b, l, h }
}
pub fn num_active(&self) -> usize {
self.a + self.l
}
pub fn num_inactive(&self) -> usize {
self.b + self.h
}
pub fn num_message_ldpc(&self) -> usize {
self.k + self.l
}
pub fn num_total(&self) -> usize {
self.k + self.l + self.h
}
}
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum CodeType {
Ordinary,
Systematic,
}
#[derive(Copy, Clone, PartialEq, Debug)]
pub enum SolverType {
OrdEnc,
OrdDec,
SysEnc,
SysDec,
}
#[derive(Copy, Clone, PartialEq, Debug)]
pub enum InactivationStrategy {
ByIndex,
FirstActive,
LastActive,
MinDegree,
TrailRun,
}
#[derive(Copy, Clone, PartialEq, Debug)]
pub enum BackSubstitutionMethod {
Direct,
Original,
}
#[derive(Debug, PartialEq, Clone, Copy)]
pub enum DecodeStatus {
Decoded,
NotDecoded,
}
#[derive(Debug, Clone)]
pub enum Operation {
EnsureZero {
list_id: Vec<usize>,
},
MultiplyAlpha {
id: usize,
},
MultiplyScalar {
scalar: u8,
id: usize,
},
AddToVector {
list_id: Vec<usize>,
target_id: usize,
},
BroadcastAdd {
src_id: usize,
target_ids: Vec<usize>,
},
MulAdd {
src_id: usize,
scalar: u8,
target_id: usize,
},
MoveTo {
src_id: usize,
target_id: usize,
},
CopyTo {
src_id: usize,
target_id: usize,
},
Remove {
id: usize,
},
InfoCodedVector {
coded_id: usize,
data_id: usize,
},
}