Source
pub fn final(self: *Wyhash) u64 {
var input: []const u8 = self.buf[0..self.buf_len];
var newSelf = self.shallowCopy(); // ensure idempotency
if (self.total_len <= 16) {
newSelf.smallKey(input);
} else {
var offset: usize = 0;
if (self.buf_len < 16) {
var scratch: [16]u8 = undefined;
const rem = 16 - self.buf_len;
@memcpy(scratch[0..rem], self.buf[self.buf.len - rem ..][0..rem]);
@memcpy(scratch[rem..][0..self.buf_len], self.buf[0..self.buf_len]);
// Same as input but with additional bytes preceding start in case of a short buffer
input = &scratch;
offset = rem;
}
newSelf.final0();
newSelf.final1(input, offset);
}
return newSelf.final2();
}