lzfse_rust/lmd/
lmd_non_pack.rs

1use super::lmd_type::LmdMax;
2use super::lmd_type::*;
3
4use std::fmt;
5
6#[derive(Copy, Clone, Eq, PartialEq)]
7pub struct Lmd<T: LmdMax>(pub LiteralLen<T>, pub MatchLen<T>, pub MatchDistance<T>);
8
9impl<T: LmdMax> Lmd<T> {
10    #[allow(dead_code)]
11    pub fn new(literal_len: u32, match_len: u32, match_distance: u32) -> Self {
12        Self(
13            LiteralLen::new(literal_len),
14            MatchLen::new(match_len),
15            MatchDistance::new(match_distance),
16        )
17    }
18
19    #[allow(dead_code)]
20    #[inline(always)]
21    pub unsafe fn new_unchecked(literal_len: u32, match_len: u32, match_distance: u32) -> Self {
22        Self(
23            LiteralLen::new_unchecked(literal_len),
24            MatchLen::new_unchecked(match_len),
25            MatchDistance::new_unchecked(match_distance),
26        )
27    }
28}
29
30impl<T: LmdMax> Default for Lmd<T> {
31    #[inline(always)]
32    fn default() -> Self {
33        Self(LiteralLen::default(), MatchLen::default(), MatchDistance::default())
34    }
35}
36
37impl<T: LmdMax> fmt::Debug for Lmd<T> {
38    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
39        fmt.debug_tuple("Lmd")
40            .field(&self.0.get())
41            .field(&self.1.get())
42            .field(&self.2.get())
43            .finish()
44    }
45}