#![allow(deprecated)]
use super::degree_sets::DegreeSetConfig;
use fountain_engine::traits::{CodeScheme, HDPC, LDPC};
use fountain_engine::types::{CodeParams, CodeType};
#[deprecated(
since = "1.0.0",
note = "Use RandomLTCode, LDPCLTCode, HDPCLTCode, LdpcSysCode, or HDPCSysCode instead"
)]
#[derive(Clone, Debug)]
pub struct CodeConfig {
pub k: usize,
pub degree_set_config: DegreeSetConfig,
pub precode_config: PrecodeConfig,
pub code_type: CodeType,
pub params: CodeParams,
}
impl CodeScheme for CodeConfig {
fn get_params(&self) -> CodeParams {
self.params.clone()
}
fn code_type(&self) -> CodeType {
self.code_type
}
fn create_degree_set_fn(&self) -> Box<dyn FnMut(usize) -> (Vec<usize>, Vec<usize>)> {
let mut degree_set = self.degree_set_config.create(&self.params);
Box::new(move |coded_id| degree_set.degree_set(coded_id))
}
fn create_precode(&self) -> (Option<Box<dyn HDPC>>, Option<Box<dyn LDPC>>) {
self.precode_config.generate(&self.params)
}
fn max_inactive_num(&self) -> usize {
(self.params.h + self.params.b + 5).min(128)
}
}