librscrc/
lib.rs

1//! # librscrc
2//!
3//! `librscrc` is a collection of crc32 algorithms with support for various approaches and custom polynomial.
4//!
5//! # Usage examples
6//! ## naive
7//!```
8//! use librscrc::prelude::*;
9//!
10//! // compute crc32
11//! let mut crc = Crc32::new_naive();
12//! crc.update(b"123456789");
13//! assert_eq!(crc.digest(), 0xCBF43926);
14//!
15//! // compute crc32c
16//! let mut crc = Crc32C::new_naive();
17//! crc.update(b"123456789");
18//! assert_eq!(crc.digest(), 0xE3069283);
19//! ```
20//!
21//! ## simd
22//! ```
23//! use librscrc::prelude::*;
24//!
25//! // compute crc32
26//! let mut crc = Crc32::new_simd();
27//! crc.update(b"123456789");
28//! assert_eq!(crc.digest(), 0xCBF43926);
29//!
30//! //compute crc32c
31//! let mut crc = Crc32C::new_simd();
32//! crc.update(b"123456789");
33//! assert_eq!(crc.digest(), 0xE3069283);
34//! ```
35//!
36//! # Custom polynomial example
37//! ```
38//! use librscrc::prelude::*;
39//!
40//! // you can provide a 33 bit polynomial or a 32 bit polynomial.
41//! let mut crc = CustomCrc32::new_simd(0x104C11DB7u64);
42//! crc.update(b"123456789");
43//! assert_eq!(crc.digest(), 0xCBF43926);
44//!
45//!```
46
47#![cfg_attr(
48    all(
49        feature = "nightly",
50        feature = "hardware",
51        any(target_arch = "aarch64")
52    ),
53    feature(stdsimd)
54)]
55
56pub mod check32;
57pub mod prelude;