| 197 | } |
| 198 | |
| 199 | fn set_data( |
| 200 | &mut self, |
| 201 | mut encoding: Encoding, |
| 202 | data: Bytes, |
| 203 | num_levels: usize, |
| 204 | num_values: Option<usize>, |
| 205 | ) -> Result<()> { |
| 206 | if encoding == Encoding::PLAIN_DICTIONARY { |
| 207 | encoding = Encoding::RLE_DICTIONARY; |
| 208 | } |
| 209 | |
| 210 | let decoder = if encoding == Encoding::RLE_DICTIONARY { |
| 211 | self.decoders[encoding as usize] |
| 212 | .as_mut() |
| 213 | .expect("Decoder for dict should have been set") |
| 214 | } else { |
| 215 | let slot = encoding as usize; |
| 216 | if self.decoders[slot].is_none() { |
| 217 | let data_decoder = get_decoder::<T>(self.descr.clone(), encoding)?; |
| 218 | self.decoders[slot] = Some(data_decoder); |
| 219 | self.decoder_mask.insert(encoding); |
| 220 | } |
| 221 | self.decoders[slot] |
| 222 | .as_mut() |
| 223 | .expect("decoder should have been inserted") |
| 224 | }; |
| 225 | |
| 226 | decoder.set_data(data, num_values.unwrap_or(num_levels))?; |
| 227 | self.current_encoding = Some(encoding); |
| 228 | Ok(()) |
| 229 | } |
| 230 | |
| 231 | fn read(&mut self, out: &mut Self::Buffer, num_values: usize) -> Result<usize> { |
| 232 | let encoding = self |