Zig 0.17.0-dev (Split by item)

This is an example of documentation generated by ZigDoc, an alternative to Zig's built-in Auto Doc feature. See also examples in other modes/formats. The project being documented here (as the example) is the Zig library itself.

compressChunksParallel

blake3.compressChunksParallel
fn compressChunksParallel(input: []const u8, key: [8]u32, chunk_counter: u64, flags: Flags, out: []u8) usize

File

lib/std/crypto/blake3.zig:581

Code

fn compressChunksParallel(input: []const u8, key: [8]u32, chunk_counter: u64, flags: Flags, out: []u8) usize {
    var chunks_array: [max_simd_degree][*]const u8 = undefined;
    var input_position: usize = 0;
    var chunks_array_len: usize = 0;

    while (input.len - input_position >= chunk_length) {
        chunks_array[chunks_array_len] = input[input_position..].ptr;
        input_position += chunk_length;
        chunks_array_len += 1;
    }

    hashMany(chunks_array[0..chunks_array_len], chunks_array_len, chunk_length / Blake3.block_length, key, chunk_counter, true, flags, .{ .chunk_start = true }, .{ .chunk_end = true }, out);

    if (input.len > input_position) {
        const counter = chunk_counter + @as(u64, chunks_array_len);
        var chunk_state = ChunkState.init(key, flags);
        chunk_state.chunk_counter = counter;
        chunk_state.update(input[input_position..]);
        const output = chunk_state.output();
        const cv = output.chainingValue();
        const cv_bytes = storeCvWords(cv);
        @memcpy(out[chunks_array_len * Blake3.digest_length ..][0..Blake3.digest_length], &cv_bytes);
        return chunks_array_len + 1;
    } else {
        return chunks_array_len;
    }
}