diff --git a/zlib-rs/src/inflate.rs b/zlib-rs/src/inflate.rs index 89065bcb..549435d7 100644 --- a/zlib-rs/src/inflate.rs +++ b/zlib-rs/src/inflate.rs @@ -263,21 +263,16 @@ pub enum Mode { Bad, } -#[derive(Clone, Copy)] +#[derive(Default, Clone, Copy)] #[allow(clippy::enum_variant_names)] enum Codes { - Fixed(&'static [Code]), + #[default] + Fixed, Codes, Len, Dist, } -impl Default for Codes { - fn default() -> Self { - Codes::Fixed(&[]) - } -} - #[derive(Default, Clone, Copy)] struct Table { codes: Codes, @@ -297,12 +292,6 @@ pub(crate) struct State<'a> { /// - bit 2 true to validate check value wrap: usize, - /// table for length/literal codes - len_table: Table, - - /// table for dist codes - dist_table: Table, - /// log base 2 of requested window size wbits: usize, // allocated window if needed (capacity == 0 if unused) @@ -366,6 +355,12 @@ pub(crate) struct State<'a> { dmax: usize, flags: i32, + /// table for length/literal codes + len_table: Table, + + /// table for dist codes + dist_table: Table, + codes_codes: [Code; crate::ENOUGH_LENS], len_codes: [Code; crate::ENOUGH_LENS], dist_codes: [Code; crate::ENOUGH_DISTS], @@ -431,7 +426,7 @@ impl<'a> State<'a> { fn len_table_ref(&self) -> &[Code] { match self.len_table.codes { - Codes::Fixed(fixed) => fixed, + Codes::Fixed => &self::inffixed_tbl::LENFIX, Codes::Codes => &self.codes_codes, Codes::Len => &self.len_codes, Codes::Dist => &self.dist_codes, @@ -440,7 +435,7 @@ impl<'a> State<'a> { fn dist_table_ref(&self) -> &[Code] { match self.dist_table.codes { - Codes::Fixed(fixed) => fixed, + Codes::Fixed => &self::inffixed_tbl::DISTFIX, Codes::Codes => &self.codes_codes, Codes::Len => &self.len_codes, Codes::Dist => &self.dist_codes, @@ -955,12 +950,12 @@ impl<'a> State<'a> { // eprintln!("inflate: fixed codes block (last = {last})"); self.len_table = Table { - codes: Codes::Fixed(&self::inffixed_tbl::LENFIX), + codes: Codes::Fixed, bits: 9, }; self.dist_table = Table { - codes: Codes::Fixed(&self::inffixed_tbl::DISTFIX), + codes: Codes::Fixed, bits: 5, };