44 lines
1.2 KiB
GDScript3
44 lines
1.2 KiB
GDScript3
|
|
static func skip_last_(count : int) -> Callable:
|
||
|
|
var skip_last = func(source : Observable) -> Observable:
|
||
|
|
# """Bypasses a specified number of elements at the end of an
|
||
|
|
# observable sequence.
|
||
|
|
#
|
||
|
|
# This operator accumulates a queue with a length enough to store
|
||
|
|
# the first `count` elements. As more elements are received,
|
||
|
|
# elements are taken from the front of the queue and produced on
|
||
|
|
# the result sequence. This causes elements to be delayed.
|
||
|
|
#
|
||
|
|
# Args:
|
||
|
|
# count: Number of elements to bypass at the end of the
|
||
|
|
# source sequence.
|
||
|
|
#
|
||
|
|
# Returns:
|
||
|
|
# An observable sequence containing the source sequence
|
||
|
|
# elements except for the bypassed ones at the end.
|
||
|
|
# """
|
||
|
|
var subscribe = func(
|
||
|
|
observer : ObserverBase,
|
||
|
|
scheduler : SchedulerBase = null
|
||
|
|
) -> DisposableBase:
|
||
|
|
var q : Array = []
|
||
|
|
|
||
|
|
var on_next = func(value):
|
||
|
|
var front = null
|
||
|
|
source.lock.lock()
|
||
|
|
q.append(value)
|
||
|
|
if q.size() > count:
|
||
|
|
front = q.pop_front()
|
||
|
|
source.lock.unlock()
|
||
|
|
|
||
|
|
if front != null:
|
||
|
|
observer.on_next(front)
|
||
|
|
|
||
|
|
return source.subscribe(
|
||
|
|
on_next, observer.on_error, observer.on_completed,
|
||
|
|
scheduler
|
||
|
|
)
|
||
|
|
|
||
|
|
return Observable.new(subscribe)
|
||
|
|
|
||
|
|
return skip_last
|