Crates.io | onlinecode |
lib.rs | onlinecode |
version | 0.1.1 |
source | src |
created_at | 2021-07-04 11:09:50.271236 |
updated_at | 2021-09-06 21:39:03.130398 |
description | An implementation of "Online Codes", a type of Fountain Code |
homepage | https://github.com/declanmalone/onlinecode |
repository | |
max_upload_size | |
id | 418544 |
size | 122,308 |
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.
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