From c90e9a6a2374a60e6e6c5cc35fae852195bb8899 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Sun, 23 Sep 2018 21:40:56 +0200 Subject: [PATCH] zero out parity bits bytewise --- bose_chaudhuri_hocquenghem_encoder.hh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bose_chaudhuri_hocquenghem_encoder.hh b/bose_chaudhuri_hocquenghem_encoder.hh index af1af3c..ae7c79f 100644 --- a/bose_chaudhuri_hocquenghem_encoder.hh +++ b/bose_chaudhuri_hocquenghem_encoder.hh @@ -53,15 +53,16 @@ public: void operator()(uint8_t *code) { // $code = data * x^{NP} + (data * x^{NP}) \mod{generator}$ - for (int i = 0; i < NP; ++i) - set_be_bit(code, K+i, 0); + static const uint8_t mask = (1<<(8-K%8))-1; + code[K/8] &= ~mask; + for (int l = K/8+1; l < N/8; ++l) + code[l] = 0; for (int i = 0; i < K; ++i) { if (get_be_bit(code, i) != get_be_bit(code, K)) { for (int j = 1; j < NP; ++j) set_be_bit(code, K+j-1, get_be_bit(generator, j) != get_be_bit(code, K+j)); set_be_bit(code, N-1, get_be_bit(generator, NP)); } else { - uint8_t mask = (1<<(8-K%8))-1; code[K/8] = (~mask&code[K/8]) | (mask&((code[K/8]<<1)|(code[K/8+1]>>7))); for (int l = K/8+1; l < (N-1)/8; ++l) code[l] = (code[l]<<1) | (code[l+1]>>7);