Fix edge cases in RangeTable
This commit is contained in:
parent
1d62ed028e
commit
ef60ae652c
@ -68,12 +68,14 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// construct table from length vector
|
// construct table from length vector
|
||||||
explicit RangeTable(std::vector<unsigned> lengths)
|
explicit RangeTable(const std::vector<unsigned>& lengths)
|
||||||
{
|
{
|
||||||
const unsigned number_of_blocks = [&lengths]() {
|
const unsigned number_of_blocks = [&lengths]() {
|
||||||
unsigned num = (lengths.size() + 1) / (BLOCK_SIZE + 1);
|
unsigned num = (lengths.size() + 1) / (BLOCK_SIZE + 1);
|
||||||
if (lengths.size() % (BLOCK_SIZE + 1) != 0)
|
if ((lengths.size() + 1) % (BLOCK_SIZE + 1) != 0)
|
||||||
|
{
|
||||||
num += 1;
|
num += 1;
|
||||||
|
}
|
||||||
return num;
|
return num;
|
||||||
}();
|
}();
|
||||||
|
|
||||||
@ -132,7 +134,8 @@ public:
|
|||||||
|
|
||||||
while (block_idx != 0)
|
while (block_idx != 0)
|
||||||
{
|
{
|
||||||
block.uint8_blocks[block_idx - 1] = 0;
|
block.uint8_blocks[block_idx - 1] = last_length;
|
||||||
|
last_length = 0;
|
||||||
block_idx = (block_idx + 1) % (BLOCK_SIZE + 1);
|
block_idx = (block_idx + 1) % (BLOCK_SIZE + 1);
|
||||||
}
|
}
|
||||||
diff_blocks.push_back(block);
|
diff_blocks.push_back(block);
|
||||||
|
Loading…
Reference in New Issue
Block a user