| 254 | // capacity and is unique. If extending existing buffer, preserves |
| 255 | // previous contents. |
| 256 | uint64_t* FOLLY_NONNULL mutableNulls(int32_t size) { |
| 257 | if (!resultNulls_->unique()) { |
| 258 | resultNulls_ = AlignedBuffer::allocate<bool>( |
| 259 | numValues_ + size, &memoryPool_, bits::kNotNull); |
| 260 | rawResultNulls_ = resultNulls_->asMutable<uint64_t>(); |
| 261 | } |
| 262 | if (resultNulls_->capacity() * 8 < numValues_ + size) { |
| 263 | // If a single read() spans many encoding runs then result nulls may |
| 264 | // occasionally need extending. |
| 265 | AlignedBuffer::reallocate<bool>( |
| 266 | &resultNulls_, |
| 267 | numValues_ + size + simd::kPadding * 8, |
| 268 | bits::kNotNull); |
| 269 | rawResultNulls_ = resultNulls_->asMutable<uint64_t>(); |
| 270 | } |
| 271 | return rawResultNulls_; |
| 272 | } |
| 273 | |
| 274 | // True if this reads contiguous rows starting at 0 and may have |
| 275 | // nulls. If so, the nulls decoded from the nulls in encoded data |