30 lines
743 B
GDScript3
Raw Normal View History

2024-12-27 21:00:07 +01:00
extends IterableBase
class_name WhileIterable
## Represents an infinite or finite sequence which is terminated when a
## condition is not met anymore.
var _it : IterableBase
var _cond : Callable
func _init(it : IterableBase, cond : Callable = GDRx.basic.default_condition):
self._it = it
self._cond = cond
class _Iterator extends Iterator:
var _itit : Iterator
var _itcond : Callable
func _init(it : Iterator, cond : Callable):
self._itit = it
self._itcond = cond
func has_next() -> bool:
return self._itit.has_next() and self._itcond.call()
func next() -> Variant:
return ItEnd.new() if not self._itcond.call() else self._itit.next()
func iter() -> Iterator:
return self._Iterator.new(self._it.iter(), self._cond)