1pub(crate) const fn crc8(poly: u8, reflect: bool, mut value: u8) -> u8 {
2 let mut i = 0;
3 if reflect {
4 while i < 8 {
5 value = (value >> 1) ^ ((value & 1) * poly);
6 i += 1;
7 }
8 } else {
9 while i < 8 {
10 value = (value << 1) ^ (((value >> 7) & 1) * poly);
11 i += 1;
12 }
13 }
14 value
15}
16
17pub(crate) const fn crc16(poly: u16, reflect: bool, mut value: u16) -> u16 {
18 if reflect {
19 let mut i = 0;
20 while i < 8 {
21 value = (value >> 1) ^ ((value & 1) * poly);
22 i += 1;
23 }
24 } else {
25 value <<= 8;
26
27 let mut i = 0;
28 while i < 8 {
29 value = (value << 1) ^ (((value >> 15) & 1) * poly);
30 i += 1;
31 }
32 }
33 value
34}
35
36pub(crate) const fn crc32(poly: u32, reflect: bool, mut value: u32) -> u32 {
37 if reflect {
38 let mut i = 0;
39 while i < 8 {
40 value = (value >> 1) ^ ((value & 1) * poly);
41 i += 1;
42 }
43 } else {
44 value <<= 24;
45
46 let mut i = 0;
47 while i < 8 {
48 value = (value << 1) ^ (((value >> 31) & 1) * poly);
49 i += 1;
50 }
51 }
52 value
53}
54
55pub(crate) const fn crc64(poly: u64, reflect: bool, mut value: u64) -> u64 {
56 if reflect {
57 let mut i = 0;
58 while i < 8 {
59 value = (value >> 1) ^ ((value & 1) * poly);
60 i += 1;
61 }
62 } else {
63 value <<= 56;
64
65 let mut i = 0;
66 while i < 8 {
67 value = (value << 1) ^ (((value >> 63) & 1) * poly);
68 i += 1;
69 }
70 }
71 value
72}
73
74pub(crate) const fn crc128(poly: u128, reflect: bool, mut value: u128) -> u128 {
75 if reflect {
76 let mut i = 0;
77 while i < 8 {
78 value = (value >> 1) ^ ((value & 1) * poly);
79 i += 1;
80 }
81 } else {
82 value <<= 120;
83
84 let mut i = 0;
85 while i < 8 {
86 value = (value << 1) ^ (((value >> 127) & 1) * poly);
87 i += 1;
88 }
89 }
90 value
91}