crc/
util.rs

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}