From c133ab2553905844cd0490dccb4ae6133f2d7a72 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Mon, 24 Sep 2018 11:56:42 +0200 Subject: [PATCH] merge generator xor with shifting --- bose_chaudhuri_hocquenghem_encoder.hh | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/bose_chaudhuri_hocquenghem_encoder.hh b/bose_chaudhuri_hocquenghem_encoder.hh index 7d1d70b..f6efd52 100644 --- a/bose_chaudhuri_hocquenghem_encoder.hh +++ b/bose_chaudhuri_hocquenghem_encoder.hh @@ -69,14 +69,16 @@ public: for (int l = K/8+1; l < N/8; ++l) code[l] = 0; for (int i = 0; i < K; ++i) { - bool fb = get_be_bit(code, i) != get_be_bit(code, K); - 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); - code[(N-1)/8] <<= 1; - if (fb) { - for (int l = 0; l <= N/8-K/8; ++l) - code[l+K/8] ^= generator[l]; + if (get_be_bit(code, i) != get_be_bit(code, K)) { + code[K/8] = generator[0] ^ ((~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] = generator[l-K/8] ^ ((code[l]<<1)|(code[l+1]>>7)); + code[(N-1)/8] = generator[NP/8] ^ (code[(N-1)/8]<<1); + } else { + 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); + code[(N-1)/8] <<= 1; } } }