rustfs-erasure-codec 8.0.0

Rust implementation of Reed-Solomon erasure coding
Documentation
use crate::errors::Error;

use super::{LeopardGf16EncodeDriver, MODULUS16, WORK_SIZE16, ceil_pow2, init_leopard_gf16_tables};
use crate::core::leopard::validate_leopard_shard_len;

pub(super) fn build_leopard_gf16_encode_driver(
    data_shards: usize,
    parity_shards: usize,
    shard_size: usize,
) -> Result<LeopardGf16EncodeDriver, Error> {
    validate_leopard_shard_len(shard_size)?;
    let _tables = init_leopard_gf16_tables();

    let m = ceil_pow2(parity_shards.max(1));
    if m > MODULUS16 {
        return Err(Error::TooManyShards);
    }
    let mtrunc = core::cmp::min(data_shards, m);
    let last_count = data_shards % m;

    Ok(LeopardGf16EncodeDriver {
        shard_size,
        m,
        mtrunc,
        last_count,
        chunk_size: WORK_SIZE16,
        work_slices: m * 2,
        skew_offset: m.saturating_sub(1),
    })
}