feature. See also
. The project being documented here (as the example) is the Zig library itself.
blake3.compressSubtreeWide
fn compressSubtreeWide(input: []const u8, key: [8]u32, chunk_counter: u64, flags: Flags, out: []u8) usize
File
Code
fn compressSubtreeWide(input: []const u8, key: [8]u32, chunk_counter: u64, flags: Flags, out: []u8) usize {
if (input.len <= max_simd_degree * chunk_length) {
return compressChunksParallel(input, key, chunk_counter, flags, out);
}
const left_input_len = leftSubtreeLen(input.len);
const right_input = input[left_input_len..];
const right_chunk_counter = chunk_counter + @as(u64, left_input_len / chunk_length);
var cv_array: [2 * max_simd_degree_or_2 * Blake3.digest_length]u8 = undefined;
var degree: usize = max_simd_degree;
if (left_input_len > chunk_length and degree == 1) {
degree = 2;
}
const right_cvs = cv_array[degree * Blake3.digest_length ..];
const left_n = compressSubtreeWide(input[0..left_input_len], key, chunk_counter, flags, cv_array[0..]);
const right_n = compressSubtreeWide(right_input, key, right_chunk_counter, flags, right_cvs);
if (left_n == 1) {
@memcpy(out[0 .. 2 * Blake3.digest_length], cv_array[0 .. 2 * Blake3.digest_length]);
return 2;
}
const num_chaining_values = left_n + right_n;
return compressParentsParallel(&cv_array, num_chaining_values, key, flags, out);
}