shithub: mc

ref: 7b625e88ac4f7d8bb5805efa498b29640f36eb80
dir: /lib/iter/enum.myr/

View raw version
use std

pkg iter =
	type enumiter(@a) = struct
		idx	: std.size
		sl	: @a[:]
	;;

	impl iterable enumiter(@a) -> (std.size, @a)
	generic byenum	: (a : @a[:] -> enumiter(@a))
;;

generic byenum = {a
	-> [.sl = a, .idx = 0]
}

impl iterable enumiter(@a) -> (std.size, @a) =
	__iternext__ = {itp, valp
		if itp.idx == itp.sl.len
			-> false
		;;
		valp# = (itp.idx, itp.sl[itp.idx])
		itp.idx++
		-> true
	}

	__iterfin__ = {itp, valp
	}
;;