pub struct ShardByShard<'a> { /* private fields */ }
Expand description

Bookkeeper for shard by shard encoding.

This is useful for avoiding incorrect use of encode_single, encode_single_sep, encode_single_shard and encode_single_shard_sep.

Use cases

Shard by shard encoding is useful for streamed data encoding where you do not have all the needed data shards immediately, but you want to spread out the encoding workload rather than doing the encoding after everything is ready.

A concrete example would be network packets encoding, where encoding packet by packet as you receive them may be more efficient than waiting for N packets then encode them all at once.

Example

let r = ReedSolomon::new(3, 2).unwrap();

let mut sbs = ShardByShard::new(&r);

let mut shards = shards!([0,  1,  2,  3,  4],
                         [5,  6,  7,  8,  9],
                         // say we don't have the 3rd data shard yet
                         // and we want to fill it in later
                         [0,  0,  0,  0,  0],
                         [0,  0,  0,  0,  0],
                         [0,  0,  0,  0,  0]);

// encode 1st and 2nd data shard
sbs.encode_shard(&mut shards).unwrap();
sbs.encode_shard(&mut shards).unwrap();

// fill in 3rd data shard
shards[2][0] = 10;
shards[2][1] = 11;
shards[2][2] = 12;
shards[2][3] = 13;
shards[2][4] = 14;

// now do the encoding
sbs.encode_shard(&mut shards).unwrap();

// above is equivalent to doing r.encode_shards(&mut shards)
assert!(r.verify_shards(&shards).unwrap());

Implementations

Creates a new instance of the bookkeeping struct.

Checks if the parity shards are ready to use.

Resets the bookkeeping data.

You should call this when you have added and encoded all data shards, and have finished using the parity shards.

Returns SBSError::LeftoverShards when there are shards encoded but parity shards are not ready to use.

Resets the bookkeeping data without checking.

Returns the current input shard index.

Constructs the parity shards partially using the current input data shard.

Returns SBSError::TooManyCalls when all input data shards have already been filled in via encode or encode_shard.

Constructs the parity shards partially using the current input data shard.

Returns SBSError::TooManyCalls when all input data shards have already been filled in via encode or encode_shard.

Constructs the parity shards partially using the current input data shard.

Returns SBSError::TooManyCalls when all input data shards have already been filled in via encode or encode_shard.

Constructs the parity shards partially using the current input data shard.

Returns TooManyCalls when all input data shards have already been filled in via encode or encode_shard.

Trait Implementations

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 alignment of pointer.
The type for initializers.
Initializes a with the given initializer. Read more
Dereferences the given pointer. Read more
Mutably dereferences the given pointer. Read more
Drops the object pointed to by the given pointer. 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.