memx/utils/needles/
qpl.rs

1use super::{_b16_value, _b2_value, _b4_value, _b8_value};
2
3#[derive(Debug, Copy, Clone, PartialEq)]
4pub(crate) struct B16Qpl {
5    pub v1: u128,
6    pub v2: u128,
7    pub v3: u128,
8    pub v4: u128,
9}
10impl B16Qpl {
11    #[allow(dead_code)]
12    #[inline(always)]
13    pub fn new(b1: u8, b2: u8, b3: u8, b4: u8) -> Self {
14        Self {
15            v1: _b16_value(b1),
16            v2: _b16_value(b2),
17            v3: _b16_value(b3),
18            v4: _b16_value(b4),
19        }
20    }
21}
22
23#[derive(Debug, Copy, Clone, PartialEq)]
24pub(crate) struct B8Qpl {
25    pub v1: u64,
26    pub v2: u64,
27    pub v3: u64,
28    pub v4: u64,
29}
30impl B8Qpl {
31    #[allow(dead_code)]
32    #[inline(always)]
33    pub fn new(b1: u8, b2: u8, b3: u8, b4: u8) -> Self {
34        Self {
35            v1: _b8_value(b1),
36            v2: _b8_value(b2),
37            v3: _b8_value(b3),
38            v4: _b8_value(b4),
39        }
40    }
41}
42
43#[derive(Debug, Copy, Clone, PartialEq)]
44pub(crate) struct B4Qpl {
45    pub v1: u32,
46    pub v2: u32,
47    pub v3: u32,
48    pub v4: u32,
49}
50impl B4Qpl {
51    #[allow(dead_code)]
52    #[inline(always)]
53    pub fn new(b1: u8, b2: u8, b3: u8, b4: u8) -> Self {
54        Self {
55            v1: _b4_value(b1),
56            v2: _b4_value(b2),
57            v3: _b4_value(b3),
58            v4: _b4_value(b4),
59        }
60    }
61}
62
63#[derive(Debug, Copy, Clone, PartialEq)]
64pub(crate) struct B2Qpl {
65    pub v1: u16,
66    pub v2: u16,
67    pub v3: u16,
68    pub v4: u16,
69}
70impl B2Qpl {
71    #[allow(dead_code)]
72    #[inline(always)]
73    pub fn new(b1: u8, b2: u8, b3: u8, b4: u8) -> Self {
74        Self {
75            v1: _b2_value(b1),
76            v2: _b2_value(b2),
77            v3: _b2_value(b3),
78            v4: _b2_value(b4),
79        }
80    }
81}
82
83#[derive(Debug, Copy, Clone, PartialEq)]
84pub struct B1Qpl {
85    pub v1: u8,
86    pub v2: u8,
87    pub v3: u8,
88    pub v4: u8,
89}
90impl B1Qpl {
91    #[allow(dead_code)]
92    #[inline(always)]
93    pub fn new(b1: u8, b2: u8, b3: u8, b4: u8) -> Self {
94        Self {
95            v1: b1,
96            v2: b2,
97            v3: b3,
98            v4: b4,
99        }
100    }
101}
102
103impl From<B16Qpl> for B8Qpl {
104    fn from(cc: B16Qpl) -> Self {
105        Self {
106            v1: cc.v1 as u64,
107            v2: cc.v2 as u64,
108            v3: cc.v3 as u64,
109            v4: cc.v4 as u64,
110        }
111    }
112}
113
114impl From<B8Qpl> for B4Qpl {
115    fn from(cc: B8Qpl) -> Self {
116        Self {
117            v1: cc.v1 as u32,
118            v2: cc.v2 as u32,
119            v3: cc.v3 as u32,
120            v4: cc.v4 as u32,
121        }
122    }
123}
124
125impl From<B4Qpl> for B2Qpl {
126    fn from(cc: B4Qpl) -> Self {
127        Self {
128            v1: cc.v1 as u16,
129            v2: cc.v2 as u16,
130            v3: cc.v3 as u16,
131            v4: cc.v4 as u16,
132        }
133    }
134}
135
136impl From<B2Qpl> for B1Qpl {
137    fn from(cc: B2Qpl) -> Self {
138        Self {
139            v1: cc.v1 as u8,
140            v2: cc.v2 as u8,
141            v3: cc.v3 as u8,
142            v4: cc.v4 as u8,
143        }
144    }
145}
146
147impl From<B1Qpl> for B16Qpl {
148    fn from(cc: B1Qpl) -> Self {
149        Self::new(cc.v1, cc.v2, cc.v3, cc.v4)
150    }
151}
152
153impl From<B1Qpl> for B8Qpl {
154    fn from(cc: B1Qpl) -> Self {
155        Self::new(cc.v1, cc.v2, cc.v3, cc.v4)
156    }
157}
158
159impl From<B1Qpl> for B4Qpl {
160    fn from(cc: B1Qpl) -> Self {
161        Self::new(cc.v1, cc.v2, cc.v3, cc.v4)
162    }
163}
164
165#[cfg(test)]
166mod mini {
167    #![allow(clippy::clone_on_copy)]
168    use super::*;
169    //
170    #[test]
171    fn t_b16() {
172        let a = B16Qpl::new(b'A', b'B', b'C', b'D');
173        let b = a.clone();
174        let c = a;
175        assert_eq!(a.v1, b.v1);
176        assert_eq!(a.v1, c.v1);
177        assert_eq!(a, b);
178        assert_eq!(format!("{a:?}"), "B16Qpl { v1: 86738642548474510294585684247313465665, v2: 88073083203066425837579310158810595906, v3: 89407523857658341380572936070307726147, v4: 90741964512250256923566561981804856388 }");
179    }
180    #[test]
181    fn t_b8() {
182        let a = B8Qpl::new(b'A', b'B', b'C', b'D');
183        let b = a.clone();
184        let c = a;
185        assert_eq!(a.v1, b.v1);
186        assert_eq!(a.v1, c.v1);
187        assert_eq!(a, b);
188        assert_eq!(
189            format!("{a:?}"),
190            "B8Qpl { v1: 4702111234474983745, v2: 4774451407313060418, v3: 4846791580151137091, v4: 4919131752989213764 }"
191        );
192    }
193    #[test]
194    fn t_b4() {
195        let a = B4Qpl::new(b'A', b'B', b'C', b'D');
196        let b = a.clone();
197        let c = a;
198        assert_eq!(a.v1, b.v1);
199        assert_eq!(a.v1, c.v1);
200        assert_eq!(a, b);
201        assert_eq!(
202            format!("{a:?}"),
203            "B4Qpl { v1: 1094795585, v2: 1111638594, v3: 1128481603, v4: 1145324612 }"
204        );
205    }
206    #[test]
207    fn t_b2() {
208        let a = B2Qpl::new(b'A', b'B', b'C', b'D');
209        let b = a.clone();
210        let c = a;
211        assert_eq!(a.v1, b.v1);
212        assert_eq!(a.v1, c.v1);
213        assert_eq!(a, b);
214        assert_eq!(
215            format!("{a:?}"),
216            "B2Qpl { v1: 16705, v2: 16962, v3: 17219, v4: 17476 }"
217        );
218    }
219    #[test]
220    fn t_b1() {
221        let a = B1Qpl::new(b'A', b'B', b'C', b'D');
222        let b = a.clone();
223        let c = a;
224        assert_eq!(a.v1, b.v1);
225        assert_eq!(a.v1, c.v1);
226        assert_eq!(a, b);
227        assert_eq!(format!("{a:?}"), "B1Qpl { v1: 65, v2: 66, v3: 67, v4: 68 }");
228    }
229    #[test]
230    fn t_into() {
231        let a_b16 = B16Qpl::new(b'A', b'B', b'C', b'D');
232        let a_b8: B8Qpl = a_b16.into();
233        let a_b4: B4Qpl = a_b8.into();
234        let a_b2: B2Qpl = a_b4.into();
235        let a_b1: B1Qpl = a_b2.into();
236        assert_eq!(a_b8, B8Qpl::new(b'A', b'B', b'C', b'D'));
237        assert_eq!(a_b4, B4Qpl::new(b'A', b'B', b'C', b'D'));
238        assert_eq!(a_b2, B2Qpl::new(b'A', b'B', b'C', b'D'));
239        assert_eq!(a_b1, B1Qpl::new(b'A', b'B', b'C', b'D'));
240    }
241}