feature. See also
. The project being documented here (as the example) is the Zig library itself.
blake3.compressChunksParallel
fn compressChunksParallel(input: []const u8, key: [8]u32, chunk_counter: u64, flags: Flags, out: []u8) usize
File
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;
}
}