ref: 6c561486a8359a7c6858be5b47170e9341633da5
dir: /lib/iter/chunk.myr/
use std
pkg iter =
type chunkiter(@a) = struct
idx : std.size
blksz : std.size
sl : @a[:]
;;
impl iterable chunkiter(@a) -> @a[:]
generic bychunk : (a : @a[:], chunk : std.size -> chunkiter(@a))
;;
generic bychunk = {a, sz
-> [.sl = a, .idx = 0, .blksz = sz]
}
impl iterable chunkiter(@a) -> @a[:] =
__iternext__ = {itp, valp
var len
len = std.min(itp.blksz, itp.sl.len - itp.idx)
if itp.idx + len == itp.sl.len
-> false
;;
valp# = itp.sl[itp.idx: itp.idx + len]
itp.idx += itp.blksz
-> true
}
__iterfin__ = {itp, valp
}
;;