| 1472 | } |
| 1473 | |
| 1474 | inline int RleBitPackedEncoder::Flush() { |
| 1475 | if (literal_count_ > 0 || repeat_count_ > 0 || num_buffered_values_ > 0) { |
| 1476 | bool all_repeat = literal_count_ == 0 && (repeat_count_ == num_buffered_values_ || |
| 1477 | num_buffered_values_ == 0); |
| 1478 | // There is something pending, figure out if it's a repeated or literal run |
| 1479 | if (repeat_count_ > 0 && all_repeat) { |
| 1480 | FlushRepeatedRun(); |
| 1481 | } else { |
| 1482 | ARROW_DCHECK_EQ(literal_count_ % 8, 0); |
| 1483 | // Buffer the last group of literals to 8 by padding with 0s. |
| 1484 | for (; num_buffered_values_ != 0 && num_buffered_values_ < 8; |
| 1485 | ++num_buffered_values_) { |
| 1486 | buffered_values_[num_buffered_values_] = 0; |
| 1487 | } |
| 1488 | literal_count_ += num_buffered_values_; |
| 1489 | FlushLiteralRun(true); |
| 1490 | repeat_count_ = 0; |
| 1491 | } |
| 1492 | } |
| 1493 | bit_writer_.Flush(); |
| 1494 | ARROW_DCHECK_EQ(num_buffered_values_, 0); |
| 1495 | ARROW_DCHECK_EQ(literal_count_, 0); |
| 1496 | ARROW_DCHECK_EQ(repeat_count_, 0); |
| 1497 | |
| 1498 | return bit_writer_.bytes_written(); |
| 1499 | } |
| 1500 | |
| 1501 | inline void RleBitPackedEncoder::CheckBufferFull() { |
| 1502 | int64_t bytes_written = bit_writer_.bytes_written(); |
nothing calls this directly
no test coverage detected