Iterator type returned by the window function for sliding window operations.
pub fn WindowIterator(comptime T: type) type
pub fn WindowIterator(comptime T: type) type {
return struct {
buffer: []const T,
index: ?usize,
size: usize,
advance: usize,
const Self = @This();
/// Returns a slice of the next window, or null if window is at end.
pub fn next(self: *Self) ?[]const T {
const start = self.index orelse return null;
const next_index = start + self.advance;
const end = if (start + self.size < self.buffer.len) blk: {
self.index = if (next_index < self.buffer.len) next_index else null;
break :blk start + self.size;
} else blk: {
self.index = null;
break :blk self.buffer.len;
};
return self.buffer[start..end];
}
/// Resets the iterator to the initial window.
pub fn reset(self: *Self) void {
self.index = 0;
}
};
}