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.
- The index must be the same one 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.
- The index must be the same one 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. 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.
Sourcepub fn decode_with_plan(
&mut self,
plan: &Plan,
) -> Result<Option<DecoderResult<'_>>, Error>
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.
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 adds a multiplication of each
missing recovery shard by a field element, so prefer decode when only
the original data is needed.
Sourcepub fn decode_with_recovery_plan(
&mut self,
plan: &Plan,
) -> Result<Option<RecoveryDecoderResult<'_>>, Error>
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.
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 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.
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 the decoder to the given configuration.
- Added shards are forgotten.
- Existing working space is reused if it is large enough, or reallocated otherwise.
Sourcepub fn supports(original_count: usize, recovery_count: usize) -> bool
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);