blob: 5d0d68cc852574cbe8cf06d46c5020cd112caae6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
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
}
;;
|