|
|
# libRaptorQ
|
|
|
|
|
|
**libRaptorQ** is a C++11 implementation of the [RaptorQ](RaptorQ) Forward Error Correction, as described in the [RFC6330](https://tools.ietf.org/html/rfc6330).
|
|
|
**libRaptorQ** is a C++11 implementation of the [RaptorQ](RaptorQ) Forward Error Correction, as described in the [RFC6330](https://tools.ietf.org/html/rfc6330).
|
|
|
Sine the RFC is needlessly complex, a simpler and slightly faster, low level API is available, too.
|
|
|
|
|
|
libRaptroQ can be used as a **C++11 header-only library**, or compiled and linked with **C and C++98 bindings**.
|
|
|
|
|
|
The implementation was started as a university laboratory project, and will be later used and included in Fenrir , the maintainer master thesis.
|
|
|
|
|
|
## Features
|
|
|
|
|
|
- RFC6330 API (complex, not recommended)
|
|
|
- RAW API (simpler, recommended)
|
|
|
- multi language:
|
|
|
- header only C++11
|
|
|
- compiled, C
|
|
|
- compiled, C++98
|
|
|
- cached precomputations (configurable)
|
|
|
- shared precomputations between processes
|
|
|
|
|
|
## Documentation
|
|
|
|
|
|
Please have a look at the "test" directory for some examples of C and C++ tests.
|
... | ... | @@ -13,9 +27,13 @@ by doing "make docs" (needs latex). |
|
|
|
|
|
## The code
|
|
|
|
|
|
This implementation is quite short (the core is almost 3k lines), thanks to the chosen language and the use of external libraries for matrix handling (eigen3).
|
|
|
The core algorithm is around 3k lines of code, but all the wrappers for C, C++98 and C++11 bring the code size up to 13k.
|
|
|
|
|
|
The chosen language is C++11, and there currently are two main branches, following the the 0.1.X release and 1.0.X.
|
|
|
|
|
|
libRaptorQ is the only implementation in C++, includes C hooks, and it is the only free (LGPL3) implementation of the rfc, except for the (apache2) java implementation, [OpenRQ](http://www.lasige.di.fc.ul.pt/openrq/) , which is much bigger and slower (thanks, java).
|
|
|
### License
|
|
|
libRaptorQ is dual-lincense, but will always remain usable in LGPL3+.
|
|
|
Dual lincensing is used to give flexibility for future license problems, and for people who can not use LGPL3. (contact me for info),
|
|
|
|
|
|
## Contributions
|
|
|
|
... | ... | |