shithub: mc

ref: 0a90d87daea7bf0a97dfc7d65cc1ef0ae9806c30
dir: /lib/iter/ref.myr/

View raw version
use std

pkg iter =
	type refiter(@a) = struct
		idx	: std.size
		sl	: @a[:]
	;;
	impl iterable refiter(@a) -> @a#
	generic byref 	: (sl : @a[:] -> refiter(@a))
;;

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

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

	__iterfin__ = {itp, valp
	}
;;