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.
Zig › std/ › hash/ › Adler32.zig › permute
permute
Adler32.permute
pub fn permute (state : u32 , input : []const u8 ) u32
File
Code
pub fn permute (state : u32 , input : []const u8 ) u32 {
const base = 65521 ;
const nmax = 5552 ;
var s1 = state & 0xffff ;
var s2 = (state >> 16 ) & 0xffff ;
if (input .len == 1 ) {
s1 +%= input [0 ];
if (s1 >= base ) {
s1 -= base ;
}
s2 +%= s1 ;
if (s2 >= base ) {
s2 -= base ;
}
} else if (input .len < 16 ) {
for (input ) |b | {
s1 +%= b ;
s2 +%= s1 ;
}
if (s1 >= base ) {
s1 -= base ;
}
s2 %= base ;
} else {
const n = nmax / 16 ;
var i : usize = 0 ;
while (i + nmax <= input .len ) {
var rounds : usize = 0 ;
while (rounds < n ) : (rounds += 1 ) {
comptime var j : usize = 0 ;
inline while (j < 16 ) : (j += 1 ) {
s1 +%= input [i + j ];
s2 +%= s1 ;
}
i += 16 ;
}
s1 %= base ;
s2 %= base ;
}
if (i < input .len ) {
while (i + 16 <= input .len ) : (i += 16 ) {
comptime var j : usize = 0 ;
inline while (j < 16 ) : (j += 1 ) {
s1 +%= input [i + j ];
s2 +%= s1 ;
}
}
while (i < input .len ) : (i += 1 ) {
s1 +%= input [i ];
s2 +%= s1 ;
}
s1 %= base ;
s2 %= base ;
}
}
return s1 | (s2 << 16 );
}