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/ › sort/ › block.zig › Iterator
Iterator
block.Iterator
const Iterator = struct
File
Code
const Iterator = struct {
size : usize ,
power_of_two : usize ,
numerator : usize ,
decimal : usize ,
denominator : usize ,
decimal_step : usize ,
numerator_step : usize ,
fn init (size2 : usize , min_level : usize ) Iterator {
const power_of_two = math .floorPowerOfTwo (usize , size2 );
const denominator = power_of_two / min_level ;
return Iterator {
.numerator = 0 ,
.decimal = 0 ,
.size = size2 ,
.power_of_two = power_of_two ,
.denominator = denominator ,
.decimal_step = size2 / denominator ,
.numerator_step = size2 % denominator ,
};
}
fn begin (self : *Iterator ) void {
self .numerator = 0 ;
self .decimal = 0 ;
}
fn nextRange (self : *Iterator ) Range {
const start = self .decimal ;
self .decimal += self .decimal_step ;
self .numerator += self .numerator_step ;
if (self .numerator >= self .denominator ) {
self .numerator -= self .denominator ;
self .decimal += 1 ;
}
return Range {
.start = start ,
.end = self .decimal ,
};
}
fn finished (self : *Iterator ) bool {
return self .decimal >= self .size ;
}
fn nextLevel (self : *Iterator ) bool {
self .decimal_step += self .decimal_step ;
self .numerator_step += self .numerator_step ;
if (self .numerator_step >= self .denominator ) {
self .numerator_step -= self .denominator ;
self .decimal_step += 1 ;
}
return (self .decimal_step < self .size );
}
fn length (self : *Iterator ) usize {
return self .decimal_step ;
}
}