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

Method SetData

cpp/src/parquet/column_reader.cc:102–150  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

100LevelDecoder::~LevelDecoder() = default;
101
102int LevelDecoder::SetData(Encoding::type encoding, int16_t max_level,
103 int num_buffered_values, const uint8_t* data,
104 int32_t data_size) {
105 max_level_ = max_level;
106 int32_t num_bytes = 0;
107 encoding_ = encoding;
108 num_values_remaining_ = num_buffered_values;
109 bit_width_ = bit_util::Log2(max_level + 1);
110 switch (encoding) {
111 case Encoding::RLE: {
112 if (data_size < 4) {
113 throw ParquetException("Received invalid levels (corrupt data page?)");
114 }
115 num_bytes = ::arrow::util::SafeLoadAs<int32_t>(data);
116 if (num_bytes < 0 || num_bytes > data_size - 4) {
117 throw ParquetException("Received invalid number of bytes (corrupt data page?)");
118 }
119 const uint8_t* decoder_data = data + 4;
120 if (!rle_decoder_) {
121 rle_decoder_ = std::make_unique<::arrow::util::RleBitPackedDecoder<int16_t>>(
122 decoder_data, num_bytes, bit_width_);
123 } else {
124 rle_decoder_->Reset(decoder_data, num_bytes, bit_width_);
125 }
126 return 4 + num_bytes;
127 }
128 case Encoding::BIT_PACKED: {
129 int num_bits = 0;
130 if (MultiplyWithOverflow(num_buffered_values, bit_width_, &num_bits)) {
131 throw ParquetException(
132 "Number of buffered values too large (corrupt data page?)");
133 }
134 num_bytes = static_cast<int32_t>(bit_util::BytesForBits(num_bits));
135 if (num_bytes < 0 || num_bytes > data_size) {
136 throw ParquetException("Received invalid number of bytes (corrupt data page?)");
137 }
138 if (!bit_packed_decoder_) {
139 bit_packed_decoder_ =
140 std::make_unique<::arrow::bit_util::BitReader>(data, num_bytes);
141 } else {
142 bit_packed_decoder_->Reset(data, num_bytes);
143 }
144 return num_bytes;
145 }
146 default:
147 throw ParquetException("Unknown encoding type for levels.");
148 }
149 return -1;
150}
151
152void LevelDecoder::SetDataV2(int32_t num_bytes, int16_t max_level,
153 int num_buffered_values, const uint8_t* data) {

Callers 3

ConfigureDictionaryMethod · 0.45
InitializeDataDecoderMethod · 0.45

Calls 5

ParquetExceptionFunction · 0.85
MultiplyWithOverflowFunction · 0.85
BytesForBitsFunction · 0.85
Log2Function · 0.50
ResetMethod · 0.45

Tested by

no test coverage detected