MCPcopy Create free account
hub / github.com/apache/arrow / RleEncodeLevels

Method RleEncodeLevels

cpp/src/parquet/column_writer.cc:938–965  ·  view source on GitHub ↗

return the size of the encoded buffer

Source from the content-addressed store, hash-verified

936
937// return the size of the encoded buffer
938int64_t ColumnWriterImpl::RleEncodeLevels(const void* src_buffer,
939 ResizableBuffer* dest_buffer, int16_t max_level,
940 bool include_length_prefix) {
941 // V1 DataPage includes the length of the RLE level as a prefix.
942 int32_t prefix_size = include_length_prefix ? sizeof(int32_t) : 0;
943
944 // TODO: This only works with due to some RLE specifics
945 int64_t rle_size = LevelEncoder::MaxBufferSize(Encoding::RLE, max_level,
946 static_cast<int>(num_buffered_values_)) +
947 prefix_size;
948
949 // Use Arrow::Buffer::shrink_to_fit = false
950 // underlying buffer only keeps growing. Resize to a smaller size does not reallocate.
951 PARQUET_THROW_NOT_OK(dest_buffer->Resize(rle_size, false));
952
953 level_encoder_.Init(Encoding::RLE, max_level, static_cast<int>(num_buffered_values_),
954 dest_buffer->mutable_data() + prefix_size,
955 static_cast<int>(dest_buffer->size() - prefix_size));
956 int encoded = level_encoder_.Encode(static_cast<int>(num_buffered_values_),
957 reinterpret_cast<const int16_t*>(src_buffer));
958 DCHECK_EQ(encoded, num_buffered_values_);
959
960 if (include_length_prefix) {
961 reinterpret_cast<int32_t*>(dest_buffer->mutable_data())[0] = level_encoder_.len();
962 }
963
964 return level_encoder_.len() + prefix_size;
965}
966
967void ColumnWriterImpl::AddDataPage() {
968 int64_t definition_levels_rle_size = 0;

Callers

nothing calls this directly

Calls 6

ResizeMethod · 0.45
InitMethod · 0.45
mutable_dataMethod · 0.45
sizeMethod · 0.45
EncodeMethod · 0.45
lenMethod · 0.45

Tested by

no test coverage detected