pub struct ReedSolomon<F: Field> { /* private fields */ }
Expand description

Reed-Solomon erasure code encoder/decoder.

Common error handling

For encode, encode_shards, verify, verify_shards, reconstruct, reconstruct_data, reconstruct_shards, reconstruct_data_shards

Return Error::TooFewShards or Error::TooManyShards when the number of provided shards does not match the codec’s one.

Return Error::EmptyShard when the first shard provided is of zero length.

Return Error::IncorrectShardSize when the provided shards are of different lengths.

For reconstruct, reconstruct_data, reconstruct_shards, reconstruct_data_shards

Return Error::TooFewShardsPresent when there are not enough shards for reconstruction.

Return Error::InvalidShardFlags when the number of flags does not match the total number of shards.

Variants of encoding methods

sep

Methods ending in _sep takes an immutable reference to data shards, and a mutable reference to parity shards.

They are useful as they do not need to borrow the data shards mutably, and other work that only needs read-only access to data shards can be done in parallel/concurrently during the encoding.

Following is a table of all the sep variants

not sepsep
encode_singleencode_single_sep
encodeencode_sep

The sep variants do similar checks on the provided data shards and parity shards.

Return Error::TooFewDataShards, Error::TooManyDataShards, Error::TooFewParityShards, or Error::TooManyParityShards when applicable.

single

Methods containing single facilitate shard by shard encoding, where the parity shards are partially constructed using one data shard at a time. See ShardByShard struct for more details on how shard by shard encoding can be useful.

They are prone to misuse, and it is recommended to use the ShardByShard bookkeeping struct instead for shard by shard encoding.

The ones that are also sep are ESPECIALLY prone to misuse. Only use them when you actually need the flexibility.

Following is a table of all the shard by shard variants

all shards at onceshard by shard
encodeencode_single
encode_sepencode_single_sep

The single variants do similar checks on the provided data shards and parity shards, and also do index check on i_data.

Return Error::InvalidIndex if i_data >= data_shard_count.

Encoding behaviour

For encode

You do not need to clear the parity shards beforehand, as the methods will overwrite them completely.

For encode_single, encode_single_sep

Calling them with i_data being 0 will overwrite the parity shards completely. If you are using the methods correctly, then you do not need to clear the parity shards beforehand.

Variants of verifying methods

verify allocate sa buffer on the heap of the same size as the parity shards, and encode the input once using the buffer to store the computed parity shards, then check if the provided parity shards match the computed ones.

verify_with_buffer, allows you to provide the buffer to avoid making heap allocation(s) for the buffer in every call.

The with_buffer variants also guarantee that the buffer contains the correct parity shards if the result is Ok(_) (i.e. it does not matter whether the verification passed or not, as long as the result is not an error, the buffer will contain the correct parity shards after the call).

Following is a table of all the with_buffer variants

not with_bufferwith_buffer
verifyverify_with_buffer

The with_buffer variants also check the dimensions of the buffer and return Error::TooFewBufferShards, Error::TooManyBufferShards, Error::EmptyShard, or Error::IncorrectShardSize when applicable.

Implementations

Creates a new instance of Reed-Solomon erasure code encoder/decoder.

Returns Error::TooFewDataShards if data_shards == 0.

Returns Error::TooFewParityShards if parity_shards == 0.

Returns Error::TooManyShards if data_shards + parity_shards > F::ORDER.

Constructs the parity shards partially using only the data shard indexed by i_data.

The slots where the parity shards sit at will be overwritten.

Warning

You must apply this method on the data shards in strict sequential order (0..data shard count), otherwise the parity shards will be incorrect.

It is recommended to use the ShardByShard bookkeeping struct instead of this method directly.

Constructs the parity shards partially using only the data shard provided.

The data shard must match the index i_data.

The slots where the parity shards sit at will be overwritten.

Warning

You must apply this method on the data shards in strict sequential order (0..data shard count), otherwise the parity shards will be incorrect.

It is recommended to use the ShardByShard bookkeeping struct instead of this method directly.

Constructs the parity shards.

The slots where the parity shards sit at will be overwritten.

Constructs the parity shards using a read-only view into the data shards.

The slots where the parity shards sit at will be overwritten.

Checks if the parity shards are correct.

This is a wrapper of verify_with_buffer.

Checks if the parity shards are correct.

Reconstructs all shards.

The shards marked not present are only overwritten when no error is detected. All provided shards must have the same length.

This means if the method returns an Error, then nothing is touched.

reconstruct, reconstruct_data, reconstruct_shards, reconstruct_data_shards share the same core code base.

Reconstructs only the data shards.

The shards marked not present are only overwritten when no error is detected. All provided shards must have the same length.

This means if the method returns an Error, then nothing is touched.

reconstruct, reconstruct_data, reconstruct_shards, reconstruct_data_shards share the same core code base.

Trait Implementations

Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
This method tests for self and other values to be equal, and is used by ==. Read more
This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
Uses borrowed data to replace owned data, usually by cloning. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.