use crate::data_manager::DataManager;
use crate::types::CodeParams;
pub trait LDPC {
fn active_column(&self, _var_col: usize) -> Vec<usize> {
vec![]
}
fn active_row(&self, _check_row: usize) -> Vec<usize> {
vec![]
}
fn inactive_column(&self, _var_col: usize) -> Vec<usize> {
vec![]
}
fn inactive_row(&self, _check_row: usize) -> Vec<usize> {
vec![]
}
fn encode(&self, manager: &mut DataManager, params: &CodeParams) {
manager.ensure_zero(&manager.data_id_range_of_ldpc_variable());
for msg_id in 0..params.a {
let adj_checks = self.active_column(msg_id);
let ldpc_ids = adj_checks
.iter()
.map(|&id| manager.data_id_of_ldpc_variable(id))
.collect::<Vec<_>>();
manager.broadcast_add_owned(manager.data_id_of_active_variable(msg_id), ldpc_ids);
}
for msg_id in 0..params.b {
let adj_checks = self.inactive_column(msg_id);
let ldpc_ids = adj_checks
.iter()
.map(|&id| manager.data_id_of_ldpc_variable(id))
.collect::<Vec<_>>();
manager.broadcast_add_owned(manager.data_id_of_inactive_variable(msg_id), ldpc_ids);
}
}
}