TestGame/addons/reactivex/operators/_lastordefault.gd

57 lines
1.3 KiB
GDScript3
Raw Normal View History

2024-12-27 21:00:07 +01:00
static func last_or_default_async(
source : Observable,
has_default : bool = false,
default_value = null
) -> Observable:
var subscribe = func(
observer : ObserverBase,
scheduler : SchedulerBase = null
) -> DisposableBase:
var value = [default_value]
var seen_value = [false]
var on_next = func(x):
value[0] = x
seen_value[0] = true
var on_completed = func():
if not seen_value[0] and not has_default:
observer.on_error(SequenceContainsNoElementsError.new())
else:
observer.on_next(value[0])
observer.on_completed()
return source.subscribe(
on_next, observer.on_error, on_completed,
scheduler
)
return Observable.new(subscribe)
static func last_or_default_(
default_value = null, predicate = null
) -> Callable:
var last_or_default = func(source : Observable) -> Observable:
# """Return last or default element.
#
# Examples:
# >>> var res = last_or_default.call(source)
#
# Args:
# source: Observable sequence to get the last item from.
#
# Returns:
# Observable sequence containing the last element in the
# observable sequence.
# """
if predicate != null:
var predicate_ : Callable = predicate
return source.pipe2(
GDRx.op.filter(predicate_),
GDRx.op.last_or_default(default_value)
)
return last_or_default_async(source, true, default_value)
return last_or_default