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 #[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}