pub struct Decoder(/* private fields */);Expand description
Reed-Solomon decoder using DefaultEngine and DefaultRate.
Implementations§
Source§impl Decoder
impl Decoder
Sourcepub fn add_original_shard<T: AsRef<[u8]>>(
&mut self,
index: usize,
original_shard: T,
) -> Result<(), Error>
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.
- Index must be the same that was used in encoding.
See basic usage for an example.
Sourcepub fn add_recovery_shard<T: AsRef<[u8]>>(
&mut self,
index: usize,
recovery_shard: T,
) -> Result<(), Error>
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.
- Index must be the same that was used in encoding.
See basic usage for an example.
Sourcepub fn decode(&mut self) -> Result<Option<DecoderResult<'_>>, Error>
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.
See basic usage for an example.
Sourcepub fn decode_with_recovery(
&mut self,
) -> Result<Option<RecoveryDecoderResult<'_>>, Error>
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 costs up to recovery_count
extra field multiplications, so prefer decode when only the original data
is needed.
Sourcepub fn new(
original_count: usize,
recovery_count: usize,
shard_bytes: usize,
) -> Result<Self, Error>
pub fn new( original_count: usize, recovery_count: usize, shard_bytes: usize, ) -> Result<Self, Error>
Creates new decoder with given configuration and allocates required working space.
See basic usage for an example.
Sourcepub fn reset(
&mut self,
original_count: usize,
recovery_count: usize,
shard_bytes: usize,
) -> Result<(), Error>
pub fn reset( &mut self, original_count: usize, recovery_count: usize, shard_bytes: usize, ) -> Result<(), Error>
Resets decoder to given configuration.
- Added shards are forgotten.
- Existing working space is re-used if it’s large enough or re-allocated otherwise.
Sourcepub fn supports(original_count: usize, recovery_count: usize) -> bool
pub fn supports(original_count: usize, recovery_count: usize) -> bool
Returns true if 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§
impl !RefUnwindSafe for Decoder
impl !UnwindSafe for Decoder
impl Freeze for Decoder
impl Send for Decoder
impl Sync for Decoder
impl Unpin for Decoder
impl UnsafeUnpin for Decoder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more