From 619d8bd3b4596562b8d6885501955caae99dc236 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Thu, 11 Jun 2020 12:29:22 +0200 Subject: [PATCH] reduced code duplication with lambda update() --- short_bch_code_decoder.hh | 45 +++++++++++++-------------------------- 1 file changed, 15 insertions(+), 30 deletions(-) diff --git a/short_bch_code_decoder.hh b/short_bch_code_decoder.hh index 14cbb93..a833ac6 100644 --- a/short_bch_code_decoder.hh +++ b/short_bch_code_decoder.hh @@ -70,21 +70,24 @@ public: // metric of hard decision int best = metric(code, word); int next = -1; + auto update = [code, &word, &best, &next](int hard) { + if (hard == word) + return; + int met = metric(code, hard); + if (met > best) { + next = best; + best = met; + word = hard; + } else if (met > next) { + next = met; + } + }; // flip each bit and see .. if (0) { for (int j = 0; j < N; ++j) { int tmp = 1 << j; int dec = (*this)(cw ^ tmp); - if (dec == word) - continue; - int met = metric(code, dec); - if (met > best) { - next = best; - best = met; - word = dec; - } else if (met > next) { - next = met; - } + update(dec); } } // Chase algorithm @@ -104,32 +107,14 @@ public: for (int i = 0; i < T; ++i) tmp |= ((j>>i)&1) << worst[i]; int dec = (*this)(cw ^ tmp); - if (dec == word) - continue; - int met = metric(code, dec); - if (met > best) { - next = best; - best = met; - word = dec; - } else if (met > next) { - next = met; - } + update(dec); } } // maximum likelihood if (K <= 6) { for (int msg = 0; msg < W; ++msg) { int enc = (msg << P) | par[msg]; - if (enc == word) - continue; - int met = metric(code, enc); - if (met > best) { - next = best; - best = met; - word = enc; - } else if (met > next) { - next = met; - } + update(enc); } } if (best == next)