use crate::mwpf::bp::gf2sparse::{GF2Entry, GF2Sparse};
pub fn rep_code(n: usize) -> Box<GF2Sparse<GF2Entry>> {
let mut pcm = GF2Sparse::new(n - 1, n, 0);
for i in 0..n - 1 {
pcm.insert_entry(i, i); pcm.insert_entry(i, i + 1); }
Box::new(pcm)
}
pub fn ring_code(n: usize) -> Box<GF2Sparse<GF2Entry>> {
let mut pcm = GF2Sparse::new(n, n, 0);
for i in 0..n {
pcm.insert_entry(i, i); pcm.insert_entry(i, (i + 1) % n); }
Box::new(pcm)
}
pub fn hamming_code(r: usize) -> Box<GF2Sparse<GF2Entry>> {
let n = (1 << r) - 1; let mut pcm = GF2Sparse::new(r, n, 0);
for i in 0..n {
let binary = i + 1;
for j in 0..r {
if binary & (1 << j) != 0 {
pcm.insert_entry(j, i);
}
}
}
Box::new(pcm)
}