From 01f07ef4c67cc553a54133a63efbbe7d7a40302b Mon Sep 17 00:00:00 2001 From: Akhil Velagapudi Date: Fri, 12 Feb 2021 10:21:48 -0500 Subject: [PATCH] Use reverse_bits from the standard library --- src/crc16.rs | 5 ++--- src/crc32.rs | 5 ++--- src/crc64.rs | 5 ++--- src/util.rs | 46 ++++++---------------------------------------- 4 files changed, 12 insertions(+), 49 deletions(-) diff --git a/src/crc16.rs b/src/crc16.rs index 373175d..d6474da 100644 --- a/src/crc16.rs +++ b/src/crc16.rs @@ -1,6 +1,5 @@ use super::{Algorithm, Crc, Digest}; use crate::table::crc16_table; -use crate::util::reflect_16; impl Crc { pub const fn new(algorithm: &'static Algorithm) -> Self { @@ -16,7 +15,7 @@ impl Crc { const fn init(&self) -> u16 { if self.algorithm.refin { - reflect_16(self.algorithm.init) + self.algorithm.init.reverse_bits() } else { self.algorithm.init } @@ -44,7 +43,7 @@ impl Crc { const fn finalize(&self, mut crc: u16) -> u16 { if self.algorithm.refin ^ self.algorithm.refout { - crc = reflect_16(crc); + crc = crc.reverse_bits(); } crc ^ self.algorithm.xorout } diff --git a/src/crc32.rs b/src/crc32.rs index 8c233ec..6ac49cf 100644 --- a/src/crc32.rs +++ b/src/crc32.rs @@ -1,6 +1,5 @@ use super::{Algorithm, Crc, Digest}; use crate::table::crc32_table; -use crate::util::reflect_32; impl Crc { pub const fn new(algorithm: &'static Algorithm) -> Self { @@ -16,7 +15,7 @@ impl Crc { const fn init(&self) -> u32 { if self.algorithm.refin { - reflect_32(self.algorithm.init) + self.algorithm.init.reverse_bits() } else { self.algorithm.init } @@ -44,7 +43,7 @@ impl Crc { const fn finalize(&self, mut crc: u32) -> u32 { if self.algorithm.refin ^ self.algorithm.refout { - crc = reflect_32(crc); + crc = crc.reverse_bits(); } crc ^ self.algorithm.xorout } diff --git a/src/crc64.rs b/src/crc64.rs index 6c98fe3..b405cd9 100644 --- a/src/crc64.rs +++ b/src/crc64.rs @@ -1,6 +1,5 @@ use super::{Algorithm, Crc, Digest}; use crate::table::crc64_table; -use crate::util::reflect_64; impl Crc { pub const fn new(algorithm: &'static Algorithm) -> Self { @@ -16,7 +15,7 @@ impl Crc { const fn init(&self) -> u64 { if self.algorithm.refin { - reflect_64(self.algorithm.init) + self.algorithm.init.reverse_bits() } else { self.algorithm.init } @@ -44,7 +43,7 @@ impl Crc { const fn finalize(&self, mut crc: u64) -> u64 { if self.algorithm.refin ^ self.algorithm.refout { - crc = reflect_64(crc); + crc = crc.reverse_bits(); } crc ^ self.algorithm.xorout } diff --git a/src/util.rs b/src/util.rs index 9a0d889..d64805b 100644 --- a/src/util.rs +++ b/src/util.rs @@ -2,7 +2,7 @@ pub(crate) const fn crc16(poly: u16, reflect: bool, mut byte: u8) -> u16 { const fn poly_sum_crc16(poly: u16, value: u16) -> u16 { (value << 1) ^ ((value >> 15) * poly) } - byte = [byte, reflect_8(byte)][reflect as usize]; + byte = [byte, byte.reverse_bits()][reflect as usize]; let mut value = (byte as u16) << 8; value = poly_sum_crc16(poly, value); value = poly_sum_crc16(poly, value); @@ -12,14 +12,14 @@ pub(crate) const fn crc16(poly: u16, reflect: bool, mut byte: u8) -> u16 { value = poly_sum_crc16(poly, value); value = poly_sum_crc16(poly, value); value = poly_sum_crc16(poly, value); - [value, reflect_16(value)][reflect as usize] + [value, value.reverse_bits()][reflect as usize] } pub(crate) const fn crc32(poly: u32, reflect: bool, mut byte: u8) -> u32 { const fn poly_sum_crc32(poly: u32, value: u32) -> u32 { (value << 1) ^ ((value >> 31) * poly) } - byte = [byte, reflect_8(byte)][reflect as usize]; + byte = [byte, byte.reverse_bits()][reflect as usize]; let mut value = (byte as u32) << 24; value = poly_sum_crc32(poly, value); value = poly_sum_crc32(poly, value); @@ -29,14 +29,14 @@ pub(crate) const fn crc32(poly: u32, reflect: bool, mut byte: u8) -> u32 { value = poly_sum_crc32(poly, value); value = poly_sum_crc32(poly, value); value = poly_sum_crc32(poly, value); - [value, reflect_32(value)][reflect as usize] + [value, value.reverse_bits()][reflect as usize] } pub(crate) const fn crc64(poly: u64, reflect: bool, mut byte: u8) -> u64 { const fn poly_sum_crc64(poly: u64, value: u64) -> u64 { (value << 1) ^ ((value >> 63) * poly) } - byte = [byte, reflect_8(byte)][reflect as usize]; + byte = [byte, byte.reverse_bits()][reflect as usize]; let mut value = (byte as u64) << 56; value = poly_sum_crc64(poly, value); value = poly_sum_crc64(poly, value); @@ -46,39 +46,5 @@ pub(crate) const fn crc64(poly: u64, reflect: bool, mut byte: u8) -> u64 { value = poly_sum_crc64(poly, value); value = poly_sum_crc64(poly, value); value = poly_sum_crc64(poly, value); - [value, reflect_64(value)][reflect as usize] -} - -pub(crate) const fn reflect_8(mut b: u8) -> u8 { - b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; - b = (b & 0xCC) >> 2 | (b & 0x33) << 2; - b = (b & 0xAA) >> 1 | (b & 0x55) << 1; - b -} - -pub(crate) const fn reflect_16(mut b: u16) -> u16 { - b = (b & 0xFF00) >> 8 | (b & 0x00FF) << 8; - b = (b & 0xF0F0) >> 4 | (b & 0x0F0F) << 4; - b = (b & 0xCCCC) >> 2 | (b & 0x3333) << 2; - b = (b & 0xAAAA) >> 1 | (b & 0x5555) << 1; - b -} - -pub(crate) const fn reflect_32(mut b: u32) -> u32 { - b = (b & 0xFFFF0000) >> 16 | (b & 0x0000FFFF) << 16; - b = (b & 0xFF00FF00) >> 8 | (b & 0x00FF00FF) << 8; - b = (b & 0xF0F0F0F0) >> 4 | (b & 0x0F0F0F0F) << 4; - b = (b & 0xCCCCCCCC) >> 2 | (b & 0x33333333) << 2; - b = (b & 0xAAAAAAAA) >> 1 | (b & 0x55555555) << 1; - b -} - -pub(crate) const fn reflect_64(mut b: u64) -> u64 { - b = (b & 0xFFFFFFFF00000000) >> 32 | (b & 0x00000000FFFFFFFF) << 32; - b = (b & 0xFFFF0000FFFF0000) >> 16 | (b & 0x0000FFFF0000FFFF) << 16; - b = (b & 0xFF00FF00FF00FF00) >> 8 | (b & 0x00FF00FF00FF00FF) << 8; - b = (b & 0xF0F0F0F0F0F0F0F0) >> 4 | (b & 0x0F0F0F0F0F0F0F0F) << 4; - b = (b & 0xCCCCCCCCCCCCCCCC) >> 2 | (b & 0x3333333333333333) << 2; - b = (b & 0xAAAAAAAAAAAAAAAA) >> 1 | (b & 0x5555555555555555) << 1; - b + [value, value.reverse_bits()][reflect as usize] }