summaryrefslogtreecommitdiff
path: root/lib/std/diriter.myr
blob: ab88bde10c6cea8afb9630beb47df79464c4ed12 (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
35
use "alloc"
use "dir"
use "option"

pkg std =
	type diriter = dir#
	impl iterable diriter -> byte[:]

	const byentry	: (d : dir# -> diriter)
;;

const byentry = {d
	-> (d : diriter)
}

impl iterable diriter -> byte[:] =
	__iternext__ = {itp, valp
:nextfile
		match dirread((itp# : dir#))
		| `Some ".":	goto nextfile
		| `Some "..":	goto nextfile
		| `Some ent:
			valp# = ent
			-> true
		| `None:
			-> false
		;;
	}

	__iterfin__ = {itp, valp
		std.slfree(valp#)
	}
;;