144 lines
4.4 KiB
Java
144 lines
4.4 KiB
Java
package io.reactivex.internal.operators.observable;
|
|
|
|
import io.reactivex.ObservableSource;
|
|
import io.reactivex.Observer;
|
|
import io.reactivex.Scheduler;
|
|
import io.reactivex.disposables.Disposable;
|
|
import io.reactivex.internal.disposables.DisposableHelper;
|
|
import io.reactivex.observers.SerializedObserver;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public final class ObservableSampleTimed<T> extends AbstractObservableWithUpstream<T, T> {
|
|
final long b;
|
|
final TimeUnit c;
|
|
final Scheduler d;
|
|
final boolean e;
|
|
|
|
static final class SampleTimedEmitLast<T> extends SampleTimedObserver<T> {
|
|
final AtomicInteger g;
|
|
|
|
SampleTimedEmitLast(Observer<? super T> observer, long j, TimeUnit timeUnit, Scheduler scheduler) {
|
|
super(observer, j, timeUnit, scheduler);
|
|
this.g = new AtomicInteger(1);
|
|
}
|
|
|
|
@Override // io.reactivex.internal.operators.observable.ObservableSampleTimed.SampleTimedObserver
|
|
void b() {
|
|
c();
|
|
if (this.g.decrementAndGet() == 0) {
|
|
this.a.onComplete();
|
|
}
|
|
}
|
|
|
|
@Override // java.lang.Runnable
|
|
public void run() {
|
|
if (this.g.incrementAndGet() == 2) {
|
|
c();
|
|
if (this.g.decrementAndGet() == 0) {
|
|
this.a.onComplete();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
static final class SampleTimedNoLast<T> extends SampleTimedObserver<T> {
|
|
SampleTimedNoLast(Observer<? super T> observer, long j, TimeUnit timeUnit, Scheduler scheduler) {
|
|
super(observer, j, timeUnit, scheduler);
|
|
}
|
|
|
|
@Override // io.reactivex.internal.operators.observable.ObservableSampleTimed.SampleTimedObserver
|
|
void b() {
|
|
this.a.onComplete();
|
|
}
|
|
|
|
@Override // java.lang.Runnable
|
|
public void run() {
|
|
c();
|
|
}
|
|
}
|
|
|
|
static abstract class SampleTimedObserver<T> extends AtomicReference<T> implements Observer<T>, Disposable, Runnable {
|
|
final Observer<? super T> a;
|
|
final long b;
|
|
final TimeUnit c;
|
|
final Scheduler d;
|
|
final AtomicReference<Disposable> e = new AtomicReference<>();
|
|
Disposable f;
|
|
|
|
SampleTimedObserver(Observer<? super T> observer, long j, TimeUnit timeUnit, Scheduler scheduler) {
|
|
this.a = observer;
|
|
this.b = j;
|
|
this.c = timeUnit;
|
|
this.d = scheduler;
|
|
}
|
|
|
|
void a() {
|
|
DisposableHelper.dispose(this.e);
|
|
}
|
|
|
|
abstract void b();
|
|
|
|
void c() {
|
|
T andSet = getAndSet(null);
|
|
if (andSet != null) {
|
|
this.a.onNext(andSet);
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.disposables.Disposable
|
|
public void dispose() {
|
|
a();
|
|
this.f.dispose();
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onComplete() {
|
|
a();
|
|
b();
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onError(Throwable th) {
|
|
a();
|
|
this.a.onError(th);
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onNext(T t) {
|
|
lazySet(t);
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onSubscribe(Disposable disposable) {
|
|
if (DisposableHelper.validate(this.f, disposable)) {
|
|
this.f = disposable;
|
|
this.a.onSubscribe(this);
|
|
Scheduler scheduler = this.d;
|
|
long j = this.b;
|
|
DisposableHelper.replace(this.e, scheduler.a(this, j, j, this.c));
|
|
}
|
|
}
|
|
}
|
|
|
|
public ObservableSampleTimed(ObservableSource<T> observableSource, long j, TimeUnit timeUnit, Scheduler scheduler, boolean z) {
|
|
super(observableSource);
|
|
this.b = j;
|
|
this.c = timeUnit;
|
|
this.d = scheduler;
|
|
this.e = z;
|
|
}
|
|
|
|
@Override // io.reactivex.Observable
|
|
public void subscribeActual(Observer<? super T> observer) {
|
|
SerializedObserver serializedObserver = new SerializedObserver(observer);
|
|
if (this.e) {
|
|
this.a.subscribe(new SampleTimedEmitLast(serializedObserver, this.b, this.c, this.d));
|
|
} else {
|
|
this.a.subscribe(new SampleTimedNoLast(serializedObserver, this.b, this.c, this.d));
|
|
}
|
|
}
|
|
}
|