44 lines
1.0 KiB
GDScript
44 lines
1.0 KiB
GDScript
static func element_at_or_default_(
|
|
index : int, has_default : bool = false, default_value = GDRx.util.GetNotSet()
|
|
) -> Callable:
|
|
|
|
if index < 0:
|
|
ArgumentOutOfRangeError.new(
|
|
"Argument cannot be lower than zero!").throw()
|
|
index = 0
|
|
|
|
var element_at_or_default = func(source : Observable) -> Observable:
|
|
var subscribe = func(
|
|
observer : ObserverBase, scheduler : SchedulerBase = null
|
|
) -> DisposableBase:
|
|
var index_ = RefValue.Set(index)
|
|
|
|
var on_next = func(x):
|
|
var found = false
|
|
if true:
|
|
var __ = LockGuard.new(source.lock)
|
|
if index_.v > 0:
|
|
index_.v -= 1
|
|
else:
|
|
found = true
|
|
|
|
if found:
|
|
observer.on_next(x)
|
|
observer.on_completed()
|
|
|
|
var on_completed = func():
|
|
if not has_default:
|
|
observer.on_error(ArgumentOutOfRangeError.new())
|
|
else:
|
|
observer.on_next(default_value)
|
|
observer.on_completed()
|
|
|
|
return source.subscribe(
|
|
on_next, observer.on_error, on_completed,
|
|
scheduler
|
|
)
|
|
|
|
return Observable.new(subscribe)
|
|
|
|
return element_at_or_default
|