| 775 | |
| 776 | template <typename T> |
| 777 | inline int32_t RleBatchDecoder<T>::SkipValues(int32_t num_values) { |
| 778 | DCHECK_GT(num_values, 0); |
| 779 | |
| 780 | int32_t num_skipped = 0; |
| 781 | if (HaveBufferedLiterals()) { |
| 782 | num_skipped = SkipBufferedLiterals(num_values); |
| 783 | } |
| 784 | while (num_skipped < num_values) { |
| 785 | // Skip RLE encoded values |
| 786 | int32_t num_repeats = NextNumRepeats(); |
| 787 | if (num_repeats > 0) { |
| 788 | int32_t num_repeats_to_consume = std::min(num_repeats, num_values - num_skipped); |
| 789 | SkipRepeatedValues(num_repeats_to_consume); |
| 790 | num_skipped += num_repeats_to_consume; |
| 791 | continue; |
| 792 | } |
| 793 | |
| 794 | // Skip literals |
| 795 | int32_t num_literals = NextNumLiterals(); |
| 796 | if (num_literals == 0) break; |
| 797 | int32_t num_literals_to_skip = std::min(num_literals, num_values - num_skipped); |
| 798 | if (!SkipLiteralValues(num_literals_to_skip)) return 0; |
| 799 | num_skipped += num_literals_to_skip; |
| 800 | } |
| 801 | return num_skipped; |
| 802 | } |
| 803 | |
| 804 | template <typename T> |
| 805 | constexpr int RleBatchDecoder<T>::LITERAL_BUFFER_LEN; |