Skip to main content

Decoder

Struct Decoder 

Source
pub struct Decoder(/* private fields */);
Expand description

Reed-Solomon decoder using DefaultEngine and DefaultRate.

Implementations§

Source§

impl Decoder

Source

pub fn add_original_shard<T: AsRef<[u8]>>( &mut self, index: usize, original_shard: T, ) -> Result<(), Error>

Adds one original shard to the decoder.

  • Shards can be added in any order.
  • The index must be the same one used in encoding.

See basic usage for an example.

Source

pub fn add_recovery_shard<T: AsRef<[u8]>>( &mut self, index: usize, recovery_shard: T, ) -> Result<(), Error>

Adds one recovery shard to the decoder.

  • Shards can be added in any order.
  • The index must be the same one used in encoding.

See basic usage for an example.

Source

pub fn decode(&mut self) -> Result<Option<DecoderResult<'_>>, Error>

Decodes the added shards, returning Some(DecoderResult) with the restored original shards, or None if every original shard was already provided (nothing to reconstruct).

When the returned DecoderResult is dropped the decoder is automatically reset and ready for a new round of decoding. When every original shard was supplied, this returns None and clears the received shards immediately. A result that is leaked instead of dropped (for example with core::mem::forget) leaves the decoder reporting a complete round, and the next decode would transform the previous round’s buffers again. Call reset before reusing a decoder whose result was leaked.

See basic usage for an example.

Source

pub fn decode_with_plan( &mut self, plan: &Plan, ) -> Result<Option<DecoderResult<'_>>, Error>

Like decode, but reads erasure coefficients from plan instead of computing them.

plan must match this decoder’s shard counts and received shard indices. Shard byte length is not part of the plan. A mismatched plan returns Error::PlanMismatch and leaves the added shards in place, so the decoder can retry with the matching plan or decode.

Source

pub fn decode_with_recovery( &mut self, ) -> Result<Option<RecoveryDecoderResult<'_>>, Error>

Like decode, but also reconstructs the missing recovery shards, returning Some(RecoveryDecoderResult) that additionally exposes them via RecoveryDecoderResult::recovery / recovery_iter. This adds a multiplication of each missing recovery shard by a field element, so prefer decode when only the original data is needed.

Source

pub fn decode_with_recovery_plan( &mut self, plan: &Plan, ) -> Result<Option<RecoveryDecoderResult<'_>>, Error>

Like decode_with_recovery, but reads erasure coefficients from plan as decode_with_plan does.

Source

pub fn new( original_count: usize, recovery_count: usize, shard_bytes: usize, ) -> Result<Self, Error>

Creates a new decoder with the given configuration and allocates the required working space.

See working space for its size and the configurations a coder accepts, and basic usage for an example.

Source

pub fn reset( &mut self, original_count: usize, recovery_count: usize, shard_bytes: usize, ) -> Result<(), Error>

Resets the decoder to the given configuration.

  • Added shards are forgotten.
  • Existing working space is reused if it is large enough, or reallocated otherwise.
Source

pub fn supports(original_count: usize, recovery_count: usize) -> bool

Returns true if the given original_count / recovery_count combination is supported.

§Examples
use commonware_cryptography::reed_solomon::Decoder;

assert_eq!(Decoder::supports(60_000, 4_000), true);
assert_eq!(Decoder::supports(60_000, 5_000), false);

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Threaded<T> for T

Source§

type Rest = ()

The outputs beyond the threaded value.
Source§

fn split(self) -> (T, ())

Splits into the threaded value and the extra outputs.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more