Allow seeding CRC32, CRC64 & Adler32 with previous partial hash.

Foo  := []u8{'F', 'o','o', '3', 'F', 'o', 'o', '4'};
crc     := hash.crc32(Foo[0:4]);
crc      = hash.crc32(Foo[4:], crc);
crc_all := hash.crc32(Foo);

fmt.printf("%8x %8x\n", crc, crc_all);
d6285ff7 d6285ff7

a32     := hash.adler32(Foo[0:4]);
a32      = hash.adler32(Foo[4:], a32);
a32_all := hash.adler32(Foo);

fmt.printf("%8x %8x\n", a32, a32_all);
0c5102b0 0c5102b0
This commit is contained in:
Jeroen van Rijn
2021-03-25 13:48:34 +01:00
parent 7a045bd957
commit f4d0f74dbb
2 changed files with 6 additions and 6 deletions
+4 -4
View File
@@ -1,14 +1,14 @@
package hash
crc32 :: proc(data: []byte) -> u32 #no_bounds_check {
result := ~u32(0);
crc32 :: proc(data: []byte, seed := u32(0)) -> u32 #no_bounds_check {
result := ~u32(seed);
for b in data {
result = result>>8 ~ _crc32_table[(result ~ u32(b)) & 0xff];
}
return ~result;
}
crc64 :: proc(data: []byte) -> u64 #no_bounds_check {
result := ~u64(0);
crc64 :: proc(data: []byte, seed := u32(0)) -> u64 #no_bounds_check {
result := ~u64(seed);
for b in data {
result = result>>8 ~ _crc64_table[(result ~ u64(b)) & 0xff];
}