1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

hash: use match expression with ranges (#6046)

This commit is contained in:
Nick Treleaven 2020-08-04 19:09:58 +01:00 committed by GitHub
parent 3dfe242dbb
commit 3ce6dd6cbc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -51,26 +51,26 @@ fn wyhash64(key byteptr, len, seed_ u64) u64 {
mut p := key mut p := key
mut seed := seed_ mut seed := seed_
mut i := len & 63 mut i := len & 63
unsafe { seed = unsafe{match i {
if i < 4 { 0...3 {
seed = wymum(wyr3(p, i) ^ seed ^ wyp0, seed ^ wyp1) wymum(wyr3(p, i) ^ seed ^ wyp0, seed ^ wyp1)
} }
else if i <= 8 { 4...8 {
seed = wymum(wyr4(p) ^ seed ^ wyp0, wyr4(p + i - 4) ^ seed ^ wyp1) wymum(wyr4(p) ^ seed ^ wyp0, wyr4(p + i - 4) ^ seed ^ wyp1)
} }
else if i <= 16 { 9...16 {
seed = wymum(wyr8(p) ^ seed ^ wyp0, wyr8(p + i - 8) ^ seed ^ wyp1) wymum(wyr8(p) ^ seed ^ wyp0, wyr8(p + i - 8) ^ seed ^ wyp1)
} }
else if i <= 24 { 17...24 {
seed = wymum(wyr8(p) ^ seed ^ wyp0, wyr8(p + 8) ^ seed ^ wyp1) ^ wymum(wyr8(p + i - 8) ^ seed ^ wyp2, seed ^ wyp3) wymum(wyr8(p) ^ seed ^ wyp0, wyr8(p + 8) ^ seed ^ wyp1) ^ wymum(wyr8(p + i - 8) ^ seed ^ wyp2, seed ^ wyp3)
} }
else if i <= 32 { 25...32 {
seed = wymum(wyr8(p) ^ seed ^ wyp0, wyr8(p + 8) ^ seed ^ wyp1) ^ wymum(wyr8(p + 16) ^ seed ^ wyp2, wyr8(p + i - 8) ^ seed ^ wyp3) wymum(wyr8(p) ^ seed ^ wyp0, wyr8(p + 8) ^ seed ^ wyp1) ^ wymum(wyr8(p + 16) ^ seed ^ wyp2, wyr8(p + i - 8) ^ seed ^ wyp3)
} }
else { else {
seed = wymum(wyr8(p) ^ seed ^ wyp0, wyr8(p + 8) ^ seed ^ wyp1) ^ wymum(wyr8(p + 16) ^ seed ^ wyp2, wyr8(p + 24) ^ seed ^ wyp3) ^ wymum(wyr8(p + i - 32) ^ seed ^ wyp1, wyr8(p + i - 24) ^ seed ^ wyp2) ^ wymum(wyr8(p + i - 16) ^ seed ^ wyp3, wyr8(p + i - 8) ^ seed ^ wyp0) wymum(wyr8(p) ^ seed ^ wyp0, wyr8(p + 8) ^ seed ^ wyp1) ^ wymum(wyr8(p + 16) ^ seed ^ wyp2, wyr8(p + 24) ^ seed ^ wyp3) ^ wymum(wyr8(p + i - 32) ^ seed ^ wyp1, wyr8(p + i - 24) ^ seed ^ wyp2) ^ wymum(wyr8(p + i - 16) ^ seed ^ wyp3, wyr8(p + i - 8) ^ seed ^ wyp0)
} }
} }}
if i == len { if i == len {
return wymum(seed, len ^ wyp4) return wymum(seed, len ^ wyp4)
} }