hu.akarnokd.rxjava3.operators.ObservableObserveOnLatest Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of rxjava3-extensions Show documentation
Show all versions of rxjava3-extensions Show documentation
RxJava 3.x extra sources, operators and components and ports of many 1.x companion libraries.
/*
* Copyright 2016-2019 David Karnok
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package hu.akarnokd.rxjava3.operators;
import java.util.concurrent.atomic.*;
import io.reactivex.rxjava3.core.*;
import io.reactivex.rxjava3.core.Scheduler.Worker;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.internal.disposables.DisposableHelper;
/**
* Schedules the event emission on a Scheduler and keeps the latest upstream item
* while the downstream's {@code onNext} is executing so that it will resume
* with that latest value.
*
* @param the item type
* @since 0.18.7
*/
final class ObservableObserveOnLatest extends Observable implements ObservableTransformer {
final Observable source;
final Scheduler scheduler;
ObservableObserveOnLatest(Observable source, Scheduler scheduler) {
this.source = source;
this.scheduler = scheduler;
}
@Override
public ObservableSource apply(Observable upstream) {
return new ObservableObserveOnLatest(upstream, scheduler);
}
@Override
protected void subscribeActual(Observer super T> observer) {
source.subscribe(new ObserveOnDropObserver(observer, scheduler.createWorker()));
}
static final class ObserveOnDropObserver extends AtomicInteger
implements Observer, Disposable, Runnable {
private static final long serialVersionUID = -11696478502477044L;
final Observer super T> downstream;
final Worker worker;
final AtomicReference