21 lines
538 B
GDScript
21 lines
538 B
GDScript
class_name ReduceIterator extends Iterator
|
|
|
|
var iterator: Iterator
|
|
var reducer: Callable
|
|
var accumulator: Variant
|
|
|
|
func _init(iterator: Iterator, reducer: Callable, initial_value: Variant) -> void:
|
|
self.iterator = iterator
|
|
self.reducer = reducer
|
|
accumulator = initial_value
|
|
|
|
func next() -> Option:
|
|
var value = iterator.next()
|
|
if value.is_none(): return value
|
|
|
|
if accumulator == null:
|
|
accumulator = value
|
|
else:
|
|
accumulator = reducer.call(accumulator, value)
|
|
|
|
return Option.some(accumulator)
|