Trait reed_solomon_simd::engine::Engine

source ·
pub trait Engine {
    // Required methods
    fn fft(
        &self,
        data: &mut ShardsRefMut<'_>,
        pos: usize,
        size: usize,
        truncated_size: usize,
        skew_delta: usize
    );
    fn ifft(
        &self,
        data: &mut ShardsRefMut<'_>,
        pos: usize,
        size: usize,
        truncated_size: usize,
        skew_delta: usize
    );
    fn mul(&self, x: &mut [u8], log_m: GfElement);
    fn xor(x: &mut [u8], y: &[u8])
       where Self: Sized;

    // Provided methods
    fn eval_poly(erasures: &mut [GfElement; 65536], truncated_size: usize)
       where Self: Sized { ... }
    fn fft_skew_end(
        &self,
        data: &mut ShardsRefMut<'_>,
        pos: usize,
        size: usize,
        truncated_size: usize
    ) { ... }
    fn formal_derivative(data: &mut ShardsRefMut<'_>)
       where Self: Sized { ... }
    fn ifft_skew_end(
        &self,
        data: &mut ShardsRefMut<'_>,
        pos: usize,
        size: usize,
        truncated_size: usize
    ) { ... }
    fn xor_within(data: &mut ShardsRefMut<'_>, x: usize, y: usize, count: usize)
       where Self: Sized { ... }
}
Expand description

Implementation of basic low-level algorithms needed for Reed-Solomon encoding/decoding.

These algorithms are not properly documented.

Naive engine is provided for those who want to study the source code to understand Engine.

Required Methods§

source

fn fft( &self, data: &mut ShardsRefMut<'_>, pos: usize, size: usize, truncated_size: usize, skew_delta: usize )

In-place decimation-in-time FFT (fast Fourier transform).

  • FFT is done on chunk data[pos .. pos + size]
  • size must be 2^n
  • Before function call data[pos .. pos + size] must be valid.
  • After function call
    • data[pos .. pos + truncated_size] contains valid FFT result.
    • data[pos + truncated_size .. pos + size] contains valid FFT result if this contained only 0u8:s and garbage otherwise.
source

fn ifft( &self, data: &mut ShardsRefMut<'_>, pos: usize, size: usize, truncated_size: usize, skew_delta: usize )

In-place decimation-in-time IFFT (inverse fast Fourier transform).

  • IFFT is done on chunk data[pos .. pos + size]
  • size must be 2^n
  • Before function call data[pos .. pos + size] must be valid.
  • After function call
    • data[pos .. pos + truncated_size] contains valid IFFT result.
    • data[pos + truncated_size .. pos + size] contains valid IFFT result if this contained only 0u8:s and garbage otherwise.
source

fn mul(&self, x: &mut [u8], log_m: GfElement)

x[] *= log_m

source

fn xor(x: &mut [u8], y: &[u8])
where Self: Sized,

x[] ^= y[]

Provided Methods§

source

fn eval_poly(erasures: &mut [GfElement; 65536], truncated_size: usize)
where Self: Sized,

Evaluate polynomial.

source

fn fft_skew_end( &self, data: &mut ShardsRefMut<'_>, pos: usize, size: usize, truncated_size: usize )

FFT with skew_delta = pos + size.

source

fn formal_derivative(data: &mut ShardsRefMut<'_>)
where Self: Sized,

Formal derivative.

source

fn ifft_skew_end( &self, data: &mut ShardsRefMut<'_>, pos: usize, size: usize, truncated_size: usize )

IFFT with skew_delta = pos + size.

source

fn xor_within(data: &mut ShardsRefMut<'_>, x: usize, y: usize, count: usize)
where Self: Sized,

data[x .. x + count] ^= data[y .. y + count]

Ranges must not overlap.

Implementors§