jimu-decompiled/sources/io/reactivex/internal/observers/InnerQueuedObserver.java
2025-05-13 19:24:51 +02:00

92 lines
2.8 KiB
Java

package io.reactivex.internal.observers;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.internal.disposables.DisposableHelper;
import io.reactivex.internal.fuseable.QueueDisposable;
import io.reactivex.internal.fuseable.SimpleQueue;
import io.reactivex.internal.util.QueueDrainHelper;
import java.util.concurrent.atomic.AtomicReference;
/* loaded from: classes2.dex */
public final class InnerQueuedObserver<T> extends AtomicReference<Disposable> implements Observer<T>, Disposable {
private static final long serialVersionUID = -5417183359794346637L;
volatile boolean done;
int fusionMode;
final InnerQueuedObserverSupport<T> parent;
final int prefetch;
SimpleQueue<T> queue;
public InnerQueuedObserver(InnerQueuedObserverSupport<T> innerQueuedObserverSupport, int i) {
this.parent = innerQueuedObserverSupport;
this.prefetch = i;
}
@Override // io.reactivex.disposables.Disposable
public void dispose() {
DisposableHelper.dispose(this);
}
public int fusionMode() {
return this.fusionMode;
}
public boolean isDisposed() {
return DisposableHelper.isDisposed(get());
}
public boolean isDone() {
return this.done;
}
@Override // io.reactivex.Observer
public void onComplete() {
this.parent.a(this);
}
@Override // io.reactivex.Observer
public void onError(Throwable th) {
this.parent.a((InnerQueuedObserver) this, th);
}
@Override // io.reactivex.Observer
public void onNext(T t) {
if (this.fusionMode == 0) {
this.parent.a((InnerQueuedObserver<InnerQueuedObserver<T>>) this, (InnerQueuedObserver<T>) t);
} else {
this.parent.a();
}
}
@Override // io.reactivex.Observer
public void onSubscribe(Disposable disposable) {
if (DisposableHelper.setOnce(this, disposable)) {
if (disposable instanceof QueueDisposable) {
QueueDisposable queueDisposable = (QueueDisposable) disposable;
int requestFusion = queueDisposable.requestFusion(3);
if (requestFusion == 1) {
this.fusionMode = requestFusion;
this.queue = queueDisposable;
this.done = true;
this.parent.a(this);
return;
}
if (requestFusion == 2) {
this.fusionMode = requestFusion;
this.queue = queueDisposable;
return;
}
}
this.queue = QueueDrainHelper.a(-this.prefetch);
}
}
public SimpleQueue<T> queue() {
return this.queue;
}
public void setDone() {
this.done = true;
}
}