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

128 lines
3.5 KiB
Java

package io.reactivex.internal.subscriptions;
import org.reactivestreams.Subscriber;
/* loaded from: classes2.dex */
public class DeferredScalarSubscription<T> extends BasicIntQueueSubscription<T> {
static final int CANCELLED = 4;
static final int FUSED_CONSUMED = 32;
static final int FUSED_EMPTY = 8;
static final int FUSED_READY = 16;
static final int HAS_REQUEST_HAS_VALUE = 3;
static final int HAS_REQUEST_NO_VALUE = 2;
static final int NO_REQUEST_HAS_VALUE = 1;
static final int NO_REQUEST_NO_VALUE = 0;
private static final long serialVersionUID = -2151279923272604993L;
protected final Subscriber<? super T> downstream;
protected T value;
public DeferredScalarSubscription(Subscriber<? super T> subscriber) {
this.downstream = subscriber;
}
public void cancel() {
set(4);
this.value = null;
}
@Override // io.reactivex.internal.fuseable.SimpleQueue
public final void clear() {
lazySet(32);
this.value = null;
}
public final void complete(T t) {
int i = get();
while (i != 8) {
if ((i & (-3)) != 0) {
return;
}
if (i == 2) {
lazySet(3);
Subscriber<? super T> subscriber = this.downstream;
subscriber.onNext(t);
if (get() != 4) {
subscriber.onComplete();
return;
}
return;
}
this.value = t;
if (compareAndSet(0, 1)) {
return;
}
i = get();
if (i == 4) {
this.value = null;
return;
}
}
this.value = t;
lazySet(16);
Subscriber<? super T> subscriber2 = this.downstream;
subscriber2.onNext(t);
if (get() != 4) {
subscriber2.onComplete();
}
}
public final boolean isCancelled() {
return get() == 4;
}
@Override // io.reactivex.internal.fuseable.SimpleQueue
public final boolean isEmpty() {
return get() != 16;
}
@Override // io.reactivex.internal.fuseable.SimpleQueue
public final T poll() {
if (get() != 16) {
return null;
}
lazySet(32);
T t = this.value;
this.value = null;
return t;
}
@Override // org.reactivestreams.Subscription
public final void request(long j) {
T t;
if (SubscriptionHelper.validate(j)) {
do {
int i = get();
if ((i & (-2)) != 0) {
return;
}
if (i == 1) {
if (!compareAndSet(1, 3) || (t = this.value) == null) {
return;
}
this.value = null;
Subscriber<? super T> subscriber = this.downstream;
subscriber.onNext(t);
if (get() != 4) {
subscriber.onComplete();
return;
}
return;
}
} while (!compareAndSet(0, 2));
}
}
@Override // io.reactivex.internal.fuseable.QueueFuseable
public final int requestFusion(int i) {
if ((i & 2) == 0) {
return 0;
}
lazySet(8);
return 2;
}
public final boolean tryCancel() {
return getAndSet(4) != 4;
}
}