#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CodecFamily {
Classic,
LeopardGF8,
LeopardGF16,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MatrixMode {
Vandermonde,
Cauchy,
JerasureLike,
Custom,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct CodecOptions {
pub fast_one_parity: bool,
pub inversion_cache: bool,
pub inversion_cache_capacity: usize,
pub codec_family: CodecFamily,
pub matrix_mode: MatrixMode,
pub max_parallel_jobs: usize,
}
impl Default for CodecOptions {
fn default() -> Self {
Self {
fast_one_parity: false,
inversion_cache: true,
inversion_cache_capacity: 0,
codec_family: CodecFamily::Classic,
matrix_mode: MatrixMode::Vandermonde,
max_parallel_jobs: 0,
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct CodecOptionsBuilder {
options: CodecOptions,
}
impl CodecOptions {
pub fn builder() -> CodecOptionsBuilder {
CodecOptionsBuilder {
options: CodecOptions::default(),
}
}
}
impl CodecOptionsBuilder {
pub fn codec_family(mut self, family: CodecFamily) -> Self {
self.options.codec_family = family;
self
}
pub fn matrix_mode(mut self, mode: MatrixMode) -> Self {
self.options.matrix_mode = mode;
self
}
pub fn fast_one_parity(mut self, enabled: bool) -> Self {
self.options.fast_one_parity = enabled;
self
}
pub fn inversion_cache(mut self, enabled: bool) -> Self {
self.options.inversion_cache = enabled;
self
}
pub fn inversion_cache_capacity(mut self, capacity: usize) -> Self {
self.options.inversion_cache_capacity = capacity;
self
}
pub fn max_parallel_jobs(mut self, jobs: usize) -> Self {
self.options.max_parallel_jobs = jobs;
self
}
pub fn build(self) -> CodecOptions {
self.options
}
}