crc/crc8/
nolookup.rs
1use crate::crc8::{finalize, init, update_nolookup};
2use crate::*;
3
4impl Crc<u8, NoTable> {
5 pub const fn new(algorithm: &'static Algorithm<u8>) -> Self {
6 Self {
7 algorithm,
8 data: [],
9 }
10 }
11
12 pub const fn checksum(&self, bytes: &[u8]) -> u8 {
13 let mut crc = init(self.algorithm, self.algorithm.init);
14 crc = self.update(crc, bytes);
15 finalize(self.algorithm, crc)
16 }
17
18 const fn update(&self, crc: u8, bytes: &[u8]) -> u8 {
19 update_nolookup(crc, self.algorithm, bytes)
20 }
21
22 pub const fn digest(&self) -> Digest<u8, NoTable> {
23 self.digest_with_initial(self.algorithm.init)
24 }
25
26 pub const fn digest_with_initial(&self, initial: u8) -> Digest<u8, NoTable> {
32 let value = init(self.algorithm, initial);
33 Digest::new(self, value)
34 }
35}
36
37impl<'a> Digest<'a, u8, NoTable> {
38 const fn new(crc: &'a Crc<u8, NoTable>, value: u8) -> Self {
39 Digest { crc, value }
40 }
41
42 pub fn update(&mut self, bytes: &[u8]) {
43 self.value = self.crc.update(self.value, bytes);
44 }
45
46 pub const fn finalize(self) -> u8 {
47 finalize(self.crc.algorithm, self.value)
48 }
49}