jpreprocess_jpcommon/feature/
limit.rs

1pub enum Limit {
2    /// unsigned: 1 - 19, signed: -19 - 19
3    S,
4    /// unsigned: 1 - 49, signed: -49 - 49
5    M,
6    /// unsigned: 1 - 99, signed: -99 - 99
7    L,
8    /// unsigned: 1 - 199, signed: -199 - 199
9    LL,
10}
11impl Limit {
12    pub fn ulimit(self, value: usize) -> u8 {
13        match self {
14            Self::S => Self::clamp(value, 1, 19) as u8,
15            Self::M => Self::clamp(value, 1, 49) as u8,
16            Self::L => Self::clamp(value, 1, 99) as u8,
17            Self::LL => Self::clamp(value, 1, 199) as u8,
18        }
19    }
20    pub fn ilimit(self, value: isize) -> i8 {
21        match self {
22            Self::S => Self::clamp(value, -19, 19) as i8,
23            Self::M => Self::clamp(value, -49, 49) as i8,
24            Self::L => Self::clamp(value, -99, 99) as i8,
25            Self::LL => Self::clamp(value, -199, 199) as i8,
26        }
27    }
28    fn clamp<T>(value: T, lower_bound: T, upper_bound: T) -> T
29    where
30        T: PartialOrd,
31    {
32        if value < lower_bound {
33            lower_bound
34        } else if upper_bound < value {
35            upper_bound
36        } else {
37            value
38        }
39    }
40}