1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// This crate does substantial index arithmetic: polynomial coefficients, trellis
// state addressing, and basis transforms index arrays by computed offsets and by
// more than one array at once. `needless_range_loop` assumes an iterator rewrite
// always applies, but here it frequently doesn't (its suggestions are often
// wrong or don't compile), so the plain indexed loop is the clearer form.
// The public API is fully documented; keep it that way.
//! Forward error correction for SDR, space, and satellite links.
//!
//! The two codecs each live in their own module. [`convolutional`] holds the
//! Viterbi encoder and decoder. [`reed_solomon`] holds the Reed-Solomon codec,
//! including the standard CCSDS (255,223) code.
//!
//! Each module names its types plainly as `Encoder` and `Decoder`. The crate
//! root also re-exports them under `Conv`- and `Rs`-prefixed aliases, so both
//! codecs can be used in one scope without a name clash. Reach for
//! [`convolutional::Encoder`] when you work with one codec, or [`ConvEncoder`]
//! and [`RsEncoder`] when you want both.
//!
//! The Reed-Solomon codec and the scalar convolutional codec build on stable
//! Rust. The SIMD convolutional decoder is behind the `simd` feature, which
//! needs a nightly compiler because it uses `portable_simd`.
pub use ;
pub use SimdDecoder as ConvSimdDecoder;
pub use ;