signalis-eb/godot/addons/iterator/reduce.gd

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)