2 releases
0.1.1 | Sep 6, 2021 |
---|---|
0.1.0 | Jul 4, 2021 |
#3 in #fountain
98KB
1.5K
SLoC
An implementation of "Online Codes", a type of Fountain Code
This is just a placeholder package at the moment. It is intended to become a port/rework of my existing Perl/C implementations.
The existing Perl implementation is available as
Net::OnlineCode on
CPAN. The source is available on
github under the
Net-OnlineCode
directory.
I note that there is another similarly-named package here on
crates.io
which implements the same algorithm. If you came here
expecting to find that, you can find it
here.
Version 0.1.1
This version implements a simple codec (encoder/decoder) that tests that all the code in the various modules works correctly.
Points of interest/note:
-
uses more natural idea of solving equations involving variables instead of implementing explicit bipartite graph
-
takes an RNG that implements
RngCore
rather than a fixed RNG (allows for easy customisation) -
codec doesn't work with files (instead, one block = one u32), but that's easily extended
-
library only handles Online Code algorithm, so user is responsible for XORing file blocks (and networking)
-
use of HashSet turns out to be a big problem as far as performance is concerned; replacing it with even an unsorted list would probably improve things a lot. HashSet is also a source of non-determinism due to iterators returning set members in a random order.
-
is a faithful implementation of the original paper
-
core routines are well tested and I have a high degree of confidence that they're correct
Dependencies
~2.5MB
~39K SLoC