Skip to content

Commit

Permalink
Remove PackedDecoder Option
Browse files Browse the repository at this point in the history
  • Loading branch information
tustvold committed Jul 20, 2022
1 parent fd039ec commit 4b40729
Showing 1 changed file with 18 additions and 18 deletions.
36 changes: 18 additions & 18 deletions parquet/src/arrow/record_reader/definition_levels.rs
Expand Up @@ -152,13 +152,15 @@ enum MaybePacked {
}

impl MaybePacked {
#[inline]
fn packed(&mut self) -> &mut PackedDecoder {
match self {
Self::Packed(d) => d,
_ => panic!("expected packed"),
}
}

#[inline]
fn fallback(&mut self) -> &mut ColumnLevelDecoderImpl {
match self {
Self::Fallback(d) => d,
Expand Down Expand Up @@ -252,7 +254,7 @@ impl DefinitionLevelDecoder for DefinitionLevelBufferDecoder {
/// [RLE]: https://github.com/apache/parquet-format/blob/master/Encodings.md#run-length-encoding--bit-packing-hybrid-rle--3
/// [BIT_PACKED]: https://github.com/apache/parquet-format/blob/master/Encodings.md#bit-packed-deprecated-bit_packed--4
struct PackedDecoder {
data: Option<ByteBufferPtr>,
data: ByteBufferPtr,
data_offset: usize,
rle_left: usize,
rle_value: bool,
Expand All @@ -261,11 +263,6 @@ struct PackedDecoder {
}

impl PackedDecoder {
#[inline]
fn data(&self) -> &[u8] {
self.data.as_ref().unwrap().data()
}

fn next_rle_block(&mut self) -> Result<()> {
let indicator_value = self.decode_header()?;
if indicator_value & 1 == 1 {
Expand All @@ -274,7 +271,7 @@ impl PackedDecoder {
self.packed_offset = 0;
} else {
self.rle_left = (indicator_value >> 1) as usize;
let byte = *self.data().get(self.data_offset).ok_or_else(|| {
let byte = *self.data.as_ref().get(self.data_offset).ok_or_else(|| {
ParquetError::EOF(
"unexpected end of file whilst decoding definition levels rle value"
.into(),
Expand All @@ -291,14 +288,17 @@ impl PackedDecoder {
fn decode_header(&mut self) -> Result<i64> {
let mut offset = 0;
let mut v: i64 = 0;
let data = self.data();
while offset < 10 {
let byte = *data.get(self.data_offset + offset).ok_or_else(|| {
ParquetError::EOF(
"unexpected end of file whilst decoding definition levels rle header"
.into(),
)
})?;
let byte = *self
.data
.as_ref()
.get(self.data_offset + offset)
.ok_or_else(|| {
ParquetError::EOF(
"unexpected end of file whilst decoding definition levels rle header"
.into(),
)
})?;

v |= ((byte & 0x7F) as i64) << (offset * 7);
offset += 1;
Expand All @@ -314,7 +314,7 @@ impl PackedDecoder {
impl PackedDecoder {
fn new() -> Self {
Self {
data: None,
data: ByteBufferPtr::new(vec![]),
data_offset: 0,
rle_left: 0,
rle_value: false,
Expand All @@ -332,7 +332,7 @@ impl PackedDecoder {
Encoding::BIT_PACKED => data.len() * 8,
_ => unreachable!("invalid level encoding: {}", encoding),
};
self.data = Some(data);
self.data = data;
self.data_offset = 0;
}

Expand All @@ -347,14 +347,14 @@ impl PackedDecoder {
} else if self.packed_count != self.packed_offset {
let to_read = (self.packed_count - self.packed_offset).min(len - read);
let offset = self.data_offset * 8 + self.packed_offset;
buffer.append_packed_range(offset..offset + to_read, self.data());
buffer.append_packed_range(offset..offset + to_read, self.data.as_ref());
self.packed_offset += to_read;
read += to_read;

if self.packed_offset == self.packed_count {
self.data_offset += self.packed_count / 8;
}
} else if self.data_offset == self.data().len() {
} else if self.data_offset == self.data.len() {
break;
} else {
self.next_rle_block()?
Expand Down

0 comments on commit 4b40729

Please sign in to comment.