From fad183ffa5c49253c2864bae6885f124972f8557 Mon Sep 17 00:00:00 2001 From: Geoffrey Allott Date: Sun, 4 Sep 2022 14:16:33 +0100 Subject: [PATCH] fix corner cases of symbol table construction logic --- src/tANS.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/tANS.c b/src/tANS.c index c7db81c..00a0999 100644 --- a/src/tANS.c +++ b/src/tANS.c @@ -103,12 +103,14 @@ static int tANS_init_symbol_tbls(struct tANS_symbol_tbl symbol_tbls[static 3], c tbls[j].freq[i] = 1; for (i = 0, sum = 0, zeroes = 0; i < N_SYMBOLS; ++i) sum += tbls[j].freq[i]; - for (i = 0; i < N_SYMBOLS && sum < 1 << LOG2_TBLSZ; ++i) - if (!(j == 2 && i == 0)) - ++tbls[j].freq[i], ++sum; - for (i = 0; i < N_SYMBOLS && sum > 1 << LOG2_TBLSZ; ++i) - if (tbls[j].freq[i] > 1) - --tbls[j].freq[i], --sum; + while (sum < 1 << LOG2_TBLSZ) + for (i = 0; i < N_SYMBOLS && sum < 1 << LOG2_TBLSZ; ++i) + if (!(j == 2 && i == 0)) + ++tbls[j].freq[i], ++sum; + while (sum > 1 << LOG2_TBLSZ) + for (i = 0; i < N_SYMBOLS && sum > 1 << LOG2_TBLSZ; ++i) + if (tbls[j].freq[i] > 1) + --tbls[j].freq[i], --sum; } } -- 2.34.1