29class LCH14ReedSolomon {
33 static_assert(Field::kCharacteristicTwo);
44 LCH14ReedSolomon(
size_t n,
size_t m,
const Field& F)
45 : f_(F), n_(n), m_(m), fft_(F) {}
49 void interpolate(Elt y[])
const {
59 std::vector<Elt> C(fftn);
64 for (
size_t i = 0; i < n_; ++i) {
67 for (
size_t i = n_; i < fftn; ++i) {
70 fft_.BidirectionalFFT(l, n_, &C[0]);
74 for (
size_t i = n_; i < std::min(m_, fftn); ++i) {
79 for (
size_t i = n_; i < fftn; ++i) {
84 for (
size_t coset = 1; (coset << l) < m_; ++coset) {
85 size_t b = (coset << l);
89 for (
size_t i = 0; i < fftn; ++i) {
92 fft_.FFT(l, b, &y[b]);
95 fft_.FFT(l, b, &C[0]);
96 for (
size_t i = 0; i + b < m_; ++i) {