46 lines
1.2 KiB
GDScript3
Raw Normal View History

2025-01-11 00:25:52 +01:00
static func take_last_(count : int) -> Callable:
var take_last = func(source : Observable) -> Observable:
# """Returns a specified number of contiguous elements from the end of an
# observable sequence.
#
# Example:
# >>> var res = take_last.call(source)
#
# This operator accumulates a buffer with a length enough to store
# elements count elements. Upon completion of the source sequence, this
# buffer is drained on the result sequence. This causes the elements to be
# delayed.
#
# Args:
# source: Number of elements to take from the end of the source
# sequence.
#
# Returns:
# An observable sequence containing the specified number of elements
# from the end of the source sequence.
# """
var subscribe = func(
observer : ObserverBase,
scheduler : SchedulerBase = null
) -> DisposableBase:
var q : Array = []
var on_next = func(x):
q.append(x)
if q.size() > count:
q.pop_front()
var on_completed = func():
while !q.is_empty():
observer.on_next(q.pop_front())
observer.on_completed()
return source.subscribe(
on_next, observer.on_error, on_completed,
scheduler
)
return Observable.new(subscribe)
return take_last