| 284 | } |
| 285 | |
| 286 | void EncodeLevels(Encoding::type encoding, int16_t max_level, int num_levels, |
| 287 | const int16_t* input_levels, std::vector<uint8_t>* bytes) { |
| 288 | LevelEncoder encoder; |
| 289 | // encode levels |
| 290 | if (encoding == Encoding::RLE) { |
| 291 | int rle_size = LevelEncoder::MaxBufferSize(encoding, max_level, num_levels); |
| 292 | bytes->resize(rle_size + sizeof(int32_t)); |
| 293 | // leave space to write the rle length value |
| 294 | encoder.Init(encoding, max_level, num_levels, bytes->data() + sizeof(int32_t), |
| 295 | rle_size); |
| 296 | encoder.Encode(num_levels, input_levels); |
| 297 | int data_length = encoder.len(); |
| 298 | memcpy(bytes->data(), &data_length, sizeof(int32_t)); |
| 299 | } else { |
| 300 | int bitpack_size = |
| 301 | LevelEncoder::MaxBufferSize(encoding, max_level, num_levels) + sizeof(int32_t); |
| 302 | bytes->resize(bitpack_size); |
| 303 | encoder.Init(encoding, max_level, num_levels, bytes->data(), |
| 304 | static_cast<int>(bytes->size())); |
| 305 | encoder.Encode(num_levels, input_levels); |
| 306 | } |
| 307 | } |
| 308 | |
| 309 | static void DecodeLevels(Encoding::type level_encoding, int16_t max_level, int num_levels, |
| 310 | int batch_size, int level_repeat_count, |