diff --git a/polar_list_decoder.hh b/polar_list_decoder.hh index 56f41cf..761b645 100644 --- a/polar_list_decoder.hh +++ b/polar_list_decoder.hh @@ -318,19 +318,12 @@ public: default: assert(false); } - int perm[TYPE::SIZE]; - for (int k = 0; k < TYPE::SIZE; ++k) - perm[k] = k; - std::sort(perm, perm + TYPE::SIZE, [metric](int a, int b) { return metric[a] < metric[b]; }); for (int i = 0, r = 0; rank != nullptr && i < TYPE::SIZE; ++i) { - if (i > 0 && metric[perm[i-1]] != metric[perm[i]]) + if (i > 0 && metric[i-1] != metric[i]) ++r; rank[i] = r; } - MAP acc; - for (int k = 0; k < TYPE::SIZE; ++k) - acc.v[k] = perm[k]; - acc = vshuf(maps[count-1], acc); + MAP acc = maps[count-1]; for (int i = count-2; i >= 0; --i) { message[i] = vshuf(message[i], acc); acc = vshuf(maps[i], acc); diff --git a/polar_parity_aided.hh b/polar_parity_aided.hh index 4068075..6931464 100644 --- a/polar_parity_aided.hh +++ b/polar_parity_aided.hh @@ -381,19 +381,12 @@ public: default: assert(false); } - int perm[TYPE::SIZE]; - for (int k = 0; k < TYPE::SIZE; ++k) - perm[k] = k; - std::sort(perm, perm + TYPE::SIZE, [metric](int a, int b) { return metric[a] < metric[b]; }); for (int i = 0, r = 0; rank != nullptr && i < TYPE::SIZE; ++i) { - if (i > 0 && metric[perm[i-1]] != metric[perm[i]]) + if (i > 0 && metric[i-1] != metric[i]) ++r; rank[i] = r; } - MAP acc; - for (int k = 0; k < TYPE::SIZE; ++k) - acc.v[k] = perm[k]; - acc = vshuf(maps[index-1], acc); + MAP acc = maps[index-1]; for (int i = index-2; i >= 0; --i) { message[i] = vshuf(message[i], acc); acc = vshuf(maps[i], acc);