pub struct Adler32 { /* private fields */ }
Expand description
Adler-32 checksum calculator.
An instance of this type is equivalent to an Adler-32 checksum: It can be created in the default
state via new
(or the provided Default
impl), or from a precalculated checksum via
from_checksum
, and the currently stored checksum can be fetched via checksum
.
This type also implements Hasher
, which makes it easy to calculate Adler-32 checksums of any
type that implements or derives Hash
. This also allows using Adler-32 in a HashMap
, although
that is not recommended (while every checksum is a hash function, they are not necessarily a
good one).
§Examples
Basic, piecewise checksum calculation:
use adler2::Adler32;
let mut adler = Adler32::new();
adler.write_slice(&[0, 1, 2]);
adler.write_slice(&[3, 4, 5]);
assert_eq!(adler.checksum(), 0x00290010);
Using Hash
to process structures:
use std::hash::Hash;
use adler2::Adler32;
#[derive(Hash)]
struct Data {
byte: u8,
word: u16,
big: u64,
}
let mut adler = Adler32::new();
let data = Data { byte: 0x1F, word: 0xABCD, big: !0 };
data.hash(&mut adler);
// hash value depends on architecture endianness
if cfg!(target_endian = "little") {
assert_eq!(adler.checksum(), 0x33410990);
}
if cfg!(target_endian = "big") {
assert_eq!(adler.checksum(), 0x331F0990);
}
Implementations§
source§impl Adler32
impl Adler32
sourcepub const fn from_checksum(sum: u32) -> Self
pub const fn from_checksum(sum: u32) -> Self
Creates an Adler32
instance from a precomputed Adler-32 checksum.
This allows resuming checksum calculation without having to keep the Adler32
instance
around.
§Example
let parts = [
"rust",
"acean",
];
let whole = adler2::adler32_slice(b"rustacean");
let mut sum = Adler32::new();
sum.write_slice(parts[0].as_bytes());
let partial = sum.checksum();
// ...later
let mut sum = Adler32::from_checksum(partial);
sum.write_slice(parts[1].as_bytes());
assert_eq!(sum.checksum(), whole);
sourcepub fn write_slice(&mut self, bytes: &[u8])
pub fn write_slice(&mut self, bytes: &[u8])
Adds bytes
to the checksum calculation.
If efficiency matters, this should be called with Byte slices that contain at least a few thousand Bytes.
Trait Implementations§
source§impl Hasher for Adler32
impl Hasher for Adler32
1.26.0 · source§fn write_u128(&mut self, i: u128)
fn write_u128(&mut self, i: u128)
u128
into this hasher.1.3.0 · source§fn write_usize(&mut self, i: usize)
fn write_usize(&mut self, i: usize)
usize
into this hasher.1.26.0 · source§fn write_i128(&mut self, i: i128)
fn write_i128(&mut self, i: i128)
i128
into this hasher.1.3.0 · source§fn write_isize(&mut self, i: isize)
fn write_isize(&mut self, i: isize)
isize
into this hasher.source§fn write_length_prefix(&mut self, len: usize)
fn write_length_prefix(&mut self, len: usize)
hasher_prefixfree_extras
)impl Copy for Adler32
Auto Trait Implementations§
impl Freeze for Adler32
impl RefUnwindSafe for Adler32
impl Send for Adler32
impl Sync for Adler32
impl Unpin for Adler32
impl UnwindSafe for Adler32
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)