209 lines
6.4 KiB
Java
209 lines
6.4 KiB
Java
package io.reactivex.internal.operators.observable;
|
|
|
|
import android.Manifest;
|
|
import io.reactivex.MaybeObserver;
|
|
import io.reactivex.MaybeSource;
|
|
import io.reactivex.Observable;
|
|
import io.reactivex.Observer;
|
|
import io.reactivex.disposables.Disposable;
|
|
import io.reactivex.internal.disposables.DisposableHelper;
|
|
import io.reactivex.internal.fuseable.SimplePlainQueue;
|
|
import io.reactivex.internal.queue.SpscLinkedArrayQueue;
|
|
import io.reactivex.internal.util.AtomicThrowable;
|
|
import io.reactivex.plugins.RxJavaPlugins;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public final class ObservableMergeWithMaybe<T> extends AbstractObservableWithUpstream<T, T> {
|
|
final MaybeSource<? extends T> b;
|
|
|
|
public ObservableMergeWithMaybe(Observable<T> observable, MaybeSource<? extends T> maybeSource) {
|
|
super(observable);
|
|
this.b = maybeSource;
|
|
}
|
|
|
|
@Override // io.reactivex.Observable
|
|
protected void subscribeActual(Observer<? super T> observer) {
|
|
MergeWithObserver mergeWithObserver = new MergeWithObserver(observer);
|
|
observer.onSubscribe(mergeWithObserver);
|
|
this.a.subscribe(mergeWithObserver);
|
|
this.b.a(mergeWithObserver.c);
|
|
}
|
|
|
|
static final class MergeWithObserver<T> extends AtomicInteger implements Observer<T>, Disposable {
|
|
final Observer<? super T> a;
|
|
final AtomicReference<Disposable> b = new AtomicReference<>();
|
|
final OtherObserver<T> c = new OtherObserver<>(this);
|
|
final AtomicThrowable d = new AtomicThrowable();
|
|
volatile SimplePlainQueue<T> e;
|
|
T f;
|
|
volatile boolean g;
|
|
volatile boolean h;
|
|
volatile int i;
|
|
|
|
static final class OtherObserver<T> extends AtomicReference<Disposable> implements MaybeObserver<T> {
|
|
final MergeWithObserver<T> a;
|
|
|
|
OtherObserver(MergeWithObserver<T> mergeWithObserver) {
|
|
this.a = mergeWithObserver;
|
|
}
|
|
|
|
@Override // io.reactivex.MaybeObserver
|
|
public void onComplete() {
|
|
this.a.d();
|
|
}
|
|
|
|
@Override // io.reactivex.MaybeObserver
|
|
public void onError(Throwable th) {
|
|
this.a.a(th);
|
|
}
|
|
|
|
@Override // io.reactivex.MaybeObserver
|
|
public void onSubscribe(Disposable disposable) {
|
|
DisposableHelper.setOnce(this, disposable);
|
|
}
|
|
|
|
@Override // io.reactivex.MaybeObserver
|
|
public void onSuccess(T t) {
|
|
this.a.a((MergeWithObserver<T>) t);
|
|
}
|
|
}
|
|
|
|
MergeWithObserver(Observer<? super T> observer) {
|
|
this.a = observer;
|
|
}
|
|
|
|
void a(T t) {
|
|
if (compareAndSet(0, 1)) {
|
|
this.a.onNext(t);
|
|
this.i = 2;
|
|
} else {
|
|
this.f = t;
|
|
this.i = 1;
|
|
if (getAndIncrement() != 0) {
|
|
return;
|
|
}
|
|
}
|
|
b();
|
|
}
|
|
|
|
void b() {
|
|
Observer<? super T> observer = this.a;
|
|
int i = 1;
|
|
while (!this.g) {
|
|
if (this.d.get() != null) {
|
|
this.f = null;
|
|
this.e = null;
|
|
observer.onError(this.d.terminate());
|
|
return;
|
|
}
|
|
int i2 = this.i;
|
|
if (i2 == 1) {
|
|
T t = this.f;
|
|
this.f = null;
|
|
this.i = 2;
|
|
observer.onNext(t);
|
|
i2 = 2;
|
|
}
|
|
boolean z = this.h;
|
|
SimplePlainQueue<T> simplePlainQueue = this.e;
|
|
Manifest poll = simplePlainQueue != null ? simplePlainQueue.poll() : null;
|
|
boolean z2 = poll == null;
|
|
if (z && z2 && i2 == 2) {
|
|
this.e = null;
|
|
observer.onComplete();
|
|
return;
|
|
} else if (z2) {
|
|
i = addAndGet(-i);
|
|
if (i == 0) {
|
|
return;
|
|
}
|
|
} else {
|
|
observer.onNext(poll);
|
|
}
|
|
}
|
|
this.f = null;
|
|
this.e = null;
|
|
}
|
|
|
|
SimplePlainQueue<T> c() {
|
|
SimplePlainQueue<T> simplePlainQueue = this.e;
|
|
if (simplePlainQueue != null) {
|
|
return simplePlainQueue;
|
|
}
|
|
SpscLinkedArrayQueue spscLinkedArrayQueue = new SpscLinkedArrayQueue(Observable.bufferSize());
|
|
this.e = spscLinkedArrayQueue;
|
|
return spscLinkedArrayQueue;
|
|
}
|
|
|
|
void d() {
|
|
this.i = 2;
|
|
a();
|
|
}
|
|
|
|
@Override // io.reactivex.disposables.Disposable
|
|
public void dispose() {
|
|
this.g = true;
|
|
DisposableHelper.dispose(this.b);
|
|
DisposableHelper.dispose(this.c);
|
|
if (getAndIncrement() == 0) {
|
|
this.e = null;
|
|
this.f = null;
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onComplete() {
|
|
this.h = true;
|
|
a();
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onError(Throwable th) {
|
|
if (!this.d.addThrowable(th)) {
|
|
RxJavaPlugins.b(th);
|
|
} else {
|
|
DisposableHelper.dispose(this.b);
|
|
a();
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onNext(T t) {
|
|
if (compareAndSet(0, 1)) {
|
|
this.a.onNext(t);
|
|
if (decrementAndGet() == 0) {
|
|
return;
|
|
}
|
|
} else {
|
|
c().offer(t);
|
|
if (getAndIncrement() != 0) {
|
|
return;
|
|
}
|
|
}
|
|
b();
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onSubscribe(Disposable disposable) {
|
|
DisposableHelper.setOnce(this.b, disposable);
|
|
}
|
|
|
|
void a(Throwable th) {
|
|
if (this.d.addThrowable(th)) {
|
|
DisposableHelper.dispose(this.b);
|
|
a();
|
|
} else {
|
|
RxJavaPlugins.b(th);
|
|
}
|
|
}
|
|
|
|
void a() {
|
|
if (getAndIncrement() == 0) {
|
|
b();
|
|
}
|
|
}
|
|
}
|
|
}
|