mirror of
https://github.com/ziglang/zig.git
synced 2026-02-14 13:30:45 +00:00
std/hash: Revert crc32 api change
This is user specified and the user doesn't necessarily have to use one of the provided polynomials declared hence we can't use an enum. Thanks @daurnimator for catching this.
This commit is contained in:
parent
ec2f9ef4e8
commit
a610352271
@ -47,11 +47,11 @@ const hashes = [_]Hash{
|
||||
.name = "adler32",
|
||||
},
|
||||
Hash{
|
||||
.ty = hash.crc.Crc32WithPoly(.IEEE),
|
||||
.ty = hash.crc.Crc32WithPoly(hash.crc.Polynomial.IEEE),
|
||||
.name = "crc32-slicing-by-8",
|
||||
},
|
||||
Hash{
|
||||
.ty = hash.crc.Crc32SmallWithPoly(.IEEE),
|
||||
.ty = hash.crc.Crc32SmallWithPoly(hash.crc.Polynomial.IEEE),
|
||||
.name = "crc32-half-byte-lookup",
|
||||
},
|
||||
Hash{
|
||||
|
||||
@ -9,17 +9,17 @@ const std = @import("../std.zig");
|
||||
const debug = std.debug;
|
||||
const testing = std.testing;
|
||||
|
||||
pub const Polynomial = enum(u32) {
|
||||
IEEE = 0xedb88320,
|
||||
Castagnoli = 0x82f63b78,
|
||||
Koopman = 0xeb31d82e,
|
||||
pub const Polynomial = struct {
|
||||
pub const IEEE = 0xedb88320;
|
||||
pub const Castagnoli = 0x82f63b78;
|
||||
pub const Koopman = 0xeb31d82e;
|
||||
};
|
||||
|
||||
// IEEE is by far the most common CRC and so is aliased by default.
|
||||
pub const Crc32 = Crc32WithPoly(.IEEE);
|
||||
pub const Crc32 = Crc32WithPoly(Polynomial.IEEE);
|
||||
|
||||
// slicing-by-8 crc32 implementation.
|
||||
pub fn Crc32WithPoly(comptime poly: Polynomial) type {
|
||||
pub fn Crc32WithPoly(comptime poly: u32) type {
|
||||
return struct {
|
||||
const Self = @This();
|
||||
const lookup_tables = comptime block: {
|
||||
@ -31,7 +31,7 @@ pub fn Crc32WithPoly(comptime poly: Polynomial) type {
|
||||
var j: usize = 0;
|
||||
while (j < 8) : (j += 1) {
|
||||
if (crc & 1 == 1) {
|
||||
crc = (crc >> 1) ^ @enumToInt(poly);
|
||||
crc = (crc >> 1) ^ poly;
|
||||
} else {
|
||||
crc = (crc >> 1);
|
||||
}
|
||||
@ -100,7 +100,7 @@ pub fn Crc32WithPoly(comptime poly: Polynomial) type {
|
||||
}
|
||||
|
||||
test "crc32 ieee" {
|
||||
const Crc32Ieee = Crc32WithPoly(.IEEE);
|
||||
const Crc32Ieee = Crc32WithPoly(Polynomial.IEEE);
|
||||
|
||||
testing.expect(Crc32Ieee.hash("") == 0x00000000);
|
||||
testing.expect(Crc32Ieee.hash("a") == 0xe8b7be43);
|
||||
@ -108,7 +108,7 @@ test "crc32 ieee" {
|
||||
}
|
||||
|
||||
test "crc32 castagnoli" {
|
||||
const Crc32Castagnoli = Crc32WithPoly(.Castagnoli);
|
||||
const Crc32Castagnoli = Crc32WithPoly(Polynomial.Castagnoli);
|
||||
|
||||
testing.expect(Crc32Castagnoli.hash("") == 0x00000000);
|
||||
testing.expect(Crc32Castagnoli.hash("a") == 0xc1d04330);
|
||||
@ -116,7 +116,7 @@ test "crc32 castagnoli" {
|
||||
}
|
||||
|
||||
// half-byte lookup table implementation.
|
||||
pub fn Crc32SmallWithPoly(comptime poly: Polynomial) type {
|
||||
pub fn Crc32SmallWithPoly(comptime poly: u32) type {
|
||||
return struct {
|
||||
const Self = @This();
|
||||
const lookup_table = comptime block: {
|
||||
@ -127,7 +127,7 @@ pub fn Crc32SmallWithPoly(comptime poly: Polynomial) type {
|
||||
var j: usize = 0;
|
||||
while (j < 8) : (j += 1) {
|
||||
if (crc & 1 == 1) {
|
||||
crc = (crc >> 1) ^ @enumToInt(poly);
|
||||
crc = (crc >> 1) ^ poly;
|
||||
} else {
|
||||
crc = (crc >> 1);
|
||||
}
|
||||
@ -164,7 +164,7 @@ pub fn Crc32SmallWithPoly(comptime poly: Polynomial) type {
|
||||
}
|
||||
|
||||
test "small crc32 ieee" {
|
||||
const Crc32Ieee = Crc32SmallWithPoly(.IEEE);
|
||||
const Crc32Ieee = Crc32SmallWithPoly(Polynomial.IEEE);
|
||||
|
||||
testing.expect(Crc32Ieee.hash("") == 0x00000000);
|
||||
testing.expect(Crc32Ieee.hash("a") == 0xe8b7be43);
|
||||
@ -172,7 +172,7 @@ test "small crc32 ieee" {
|
||||
}
|
||||
|
||||
test "small crc32 castagnoli" {
|
||||
const Crc32Castagnoli = Crc32SmallWithPoly(.Castagnoli);
|
||||
const Crc32Castagnoli = Crc32SmallWithPoly(Polynomial.Castagnoli);
|
||||
|
||||
testing.expect(Crc32Castagnoli.hash("") == 0x00000000);
|
||||
testing.expect(Crc32Castagnoli.hash("a") == 0xc1d04330);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user