pub mod ec {
pub fn init_tables(k: i32, rows: i32, a: &[u8], gf_tbls: &mut [u8]) {
unsafe {
erasure_isa_l_sys::ec_init_tables(k, rows, a.as_ptr() as *mut u8, gf_tbls.as_mut_ptr());
}
}
pub fn encode_data(
len: i32,
k: i32,
rows: i32,
gf_tbls: &[u8],
data: &[*const u8],
code: &mut [*mut u8],
) {
unsafe {
erasure_isa_l_sys::ec_encode_data(
len,
k,
rows,
gf_tbls.as_ptr() as *mut u8,
data.as_ptr() as *mut *mut u8,
code.as_mut_ptr(),
);
}
}
pub fn encode_data_update(
len: i32,
k: i32,
rows: i32,
vec_i: i32,
gf_tbls: &[u8],
data: &[u8],
code: &mut [*mut u8],
) {
unsafe {
erasure_isa_l_sys::ec_encode_data_update(
len,
k,
rows,
vec_i,
gf_tbls.as_ptr() as *mut u8,
data.as_ptr() as *mut u8,
code.as_mut().as_mut_ptr(),
);
}
}
}
pub mod gf {
pub fn mul(a: u8, b: u8) -> u8 {
unsafe { erasure_isa_l_sys::gf_mul(a, b) }
}
pub fn inv(a: u8) -> u8 {
unsafe { erasure_isa_l_sys::gf_inv(a) }
}
pub fn gen_rs_matrix(a: &mut [u8], m: i32, k: i32) {
unsafe {
erasure_isa_l_sys::gf_gen_rs_matrix(a.as_mut_ptr(), m, k);
}
}
pub fn gen_cauchy1_matrix(a: &mut [u8], m: i32, k: i32) {
unsafe {
erasure_isa_l_sys::gf_gen_cauchy1_matrix(a.as_mut_ptr(), m, k);
}
}
pub fn invert_matrix(input: &mut [u8], output: &mut [u8], n: i32) -> bool {
let res = unsafe {
erasure_isa_l_sys::gf_invert_matrix(input.as_mut_ptr(), output.as_mut_ptr(), n)
};
res == 0
}
pub fn vect_dot_prod(len: i32, vlen: i32, gf_tbls: &[u8], src: &[*const u8], dest: &mut [u8]) {
unsafe {
erasure_isa_l_sys::gf_vect_dot_prod(
len,
vlen,
gf_tbls.as_ptr() as *mut u8,
src.as_ptr() as *mut *mut u8,
dest.as_mut_ptr(),
);
}
}
pub fn vect_mad(len: i32, vec: i32, vec_i: i32, gf_tbls: &[u8], src: &[u8], dest: &mut [u8]) {
unsafe {
erasure_isa_l_sys::gf_vect_mad(
len,
vec,
vec_i,
gf_tbls.as_ptr() as *mut u8,
src.as_ptr() as *mut u8,
dest.as_mut_ptr(),
);
}
}
}