DoxigAlpha

final

Function parameters

Parameters

#
self:*Wyhash

Type definitions in this namespace

Types

#

Source

Implementation

#
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;
        var scratch: [16]u8 = undefined;
        if (self.buf_len < 16) {
            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();
}