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

352 lines
14 KiB
Java

package io.reactivex.internal.operators.observable;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.Observer;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.exceptions.Exceptions;
import io.reactivex.functions.BiFunction;
import io.reactivex.functions.Function;
import io.reactivex.internal.disposables.DisposableHelper;
import io.reactivex.internal.functions.ObjectHelper;
import io.reactivex.internal.queue.SpscLinkedArrayQueue;
import io.reactivex.internal.util.ExceptionHelper;
import io.reactivex.plugins.RxJavaPlugins;
import io.reactivex.subjects.UnicastSubject;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
/* loaded from: classes2.dex */
public final class ObservableGroupJoin<TLeft, TRight, TLeftEnd, TRightEnd, R> extends AbstractObservableWithUpstream<TLeft, R> {
final ObservableSource<? extends TRight> b;
final Function<? super TLeft, ? extends ObservableSource<TLeftEnd>> c;
final Function<? super TRight, ? extends ObservableSource<TRightEnd>> d;
final BiFunction<? super TLeft, ? super Observable<TRight>, ? extends R> e;
static final class GroupJoinDisposable<TLeft, TRight, TLeftEnd, TRightEnd, R> extends AtomicInteger implements Disposable, JoinSupport {
static final Integer n = 1;
static final Integer o = 2;
static final Integer p = 3;
static final Integer q = 4;
final Observer<? super R> a;
final Function<? super TLeft, ? extends ObservableSource<TLeftEnd>> g;
final Function<? super TRight, ? extends ObservableSource<TRightEnd>> h;
final BiFunction<? super TLeft, ? super Observable<TRight>, ? extends R> i;
int k;
int l;
volatile boolean m;
final CompositeDisposable c = new CompositeDisposable();
final SpscLinkedArrayQueue<Object> b = new SpscLinkedArrayQueue<>(Observable.bufferSize());
final Map<Integer, UnicastSubject<TRight>> d = new LinkedHashMap();
final Map<Integer, TRight> e = new LinkedHashMap();
final AtomicReference<Throwable> f = new AtomicReference<>();
final AtomicInteger j = new AtomicInteger(2);
GroupJoinDisposable(Observer<? super R> observer, Function<? super TLeft, ? extends ObservableSource<TLeftEnd>> function, Function<? super TRight, ? extends ObservableSource<TRightEnd>> function2, BiFunction<? super TLeft, ? super Observable<TRight>, ? extends R> biFunction) {
this.a = observer;
this.g = function;
this.h = function2;
this.i = biFunction;
}
void a() {
this.c.dispose();
}
void b() {
if (getAndIncrement() != 0) {
return;
}
SpscLinkedArrayQueue<?> spscLinkedArrayQueue = this.b;
Observer<? super R> observer = this.a;
int i = 1;
while (!this.m) {
if (this.f.get() != null) {
spscLinkedArrayQueue.clear();
a();
a(observer);
return;
}
boolean z = this.j.get() == 0;
Integer num = (Integer) spscLinkedArrayQueue.poll();
boolean z2 = num == null;
if (z && z2) {
Iterator<UnicastSubject<TRight>> it = this.d.values().iterator();
while (it.hasNext()) {
it.next().onComplete();
}
this.d.clear();
this.e.clear();
this.c.dispose();
observer.onComplete();
return;
}
if (z2) {
i = addAndGet(-i);
if (i == 0) {
return;
}
} else {
Object poll = spscLinkedArrayQueue.poll();
if (num == n) {
UnicastSubject d = UnicastSubject.d();
int i2 = this.k;
this.k = i2 + 1;
this.d.put(Integer.valueOf(i2), d);
try {
ObservableSource apply = this.g.apply(poll);
ObjectHelper.a(apply, "The leftEnd returned a null ObservableSource");
ObservableSource observableSource = apply;
LeftRightEndObserver leftRightEndObserver = new LeftRightEndObserver(this, true, i2);
this.c.b(leftRightEndObserver);
observableSource.subscribe(leftRightEndObserver);
if (this.f.get() != null) {
spscLinkedArrayQueue.clear();
a();
a(observer);
return;
}
try {
R apply2 = this.i.apply(poll, d);
ObjectHelper.a(apply2, "The resultSelector returned a null value");
observer.onNext(apply2);
Iterator<TRight> it2 = this.e.values().iterator();
while (it2.hasNext()) {
d.onNext(it2.next());
}
} catch (Throwable th) {
a(th, observer, spscLinkedArrayQueue);
return;
}
} catch (Throwable th2) {
a(th2, observer, spscLinkedArrayQueue);
return;
}
} else if (num == o) {
int i3 = this.l;
this.l = i3 + 1;
this.e.put(Integer.valueOf(i3), poll);
try {
ObservableSource apply3 = this.h.apply(poll);
ObjectHelper.a(apply3, "The rightEnd returned a null ObservableSource");
ObservableSource observableSource2 = apply3;
LeftRightEndObserver leftRightEndObserver2 = new LeftRightEndObserver(this, false, i3);
this.c.b(leftRightEndObserver2);
observableSource2.subscribe(leftRightEndObserver2);
if (this.f.get() != null) {
spscLinkedArrayQueue.clear();
a();
a(observer);
return;
} else {
Iterator<UnicastSubject<TRight>> it3 = this.d.values().iterator();
while (it3.hasNext()) {
it3.next().onNext(poll);
}
}
} catch (Throwable th3) {
a(th3, observer, spscLinkedArrayQueue);
return;
}
} else if (num == p) {
LeftRightEndObserver leftRightEndObserver3 = (LeftRightEndObserver) poll;
UnicastSubject<TRight> remove = this.d.remove(Integer.valueOf(leftRightEndObserver3.c));
this.c.a(leftRightEndObserver3);
if (remove != null) {
remove.onComplete();
}
} else if (num == q) {
LeftRightEndObserver leftRightEndObserver4 = (LeftRightEndObserver) poll;
this.e.remove(Integer.valueOf(leftRightEndObserver4.c));
this.c.a(leftRightEndObserver4);
}
}
}
spscLinkedArrayQueue.clear();
}
@Override // io.reactivex.disposables.Disposable
public void dispose() {
if (this.m) {
return;
}
this.m = true;
a();
if (getAndIncrement() == 0) {
this.b.clear();
}
}
void a(Observer<?> observer) {
Throwable a = ExceptionHelper.a(this.f);
Iterator<UnicastSubject<TRight>> it = this.d.values().iterator();
while (it.hasNext()) {
it.next().onError(a);
}
this.d.clear();
this.e.clear();
observer.onError(a);
}
void a(Throwable th, Observer<?> observer, SpscLinkedArrayQueue<?> spscLinkedArrayQueue) {
Exceptions.b(th);
ExceptionHelper.a(this.f, th);
spscLinkedArrayQueue.clear();
a();
a(observer);
}
@Override // io.reactivex.internal.operators.observable.ObservableGroupJoin.JoinSupport
public void a(LeftRightObserver leftRightObserver) {
this.c.c(leftRightObserver);
this.j.decrementAndGet();
b();
}
@Override // io.reactivex.internal.operators.observable.ObservableGroupJoin.JoinSupport
public void a(boolean z, Object obj) {
synchronized (this) {
this.b.a(z ? n : o, (Integer) obj);
}
b();
}
@Override // io.reactivex.internal.operators.observable.ObservableGroupJoin.JoinSupport
public void a(boolean z, LeftRightEndObserver leftRightEndObserver) {
synchronized (this) {
this.b.a(z ? p : q, (Integer) leftRightEndObserver);
}
b();
}
@Override // io.reactivex.internal.operators.observable.ObservableGroupJoin.JoinSupport
public void a(Throwable th) {
if (ExceptionHelper.a(this.f, th)) {
b();
} else {
RxJavaPlugins.b(th);
}
}
@Override // io.reactivex.internal.operators.observable.ObservableGroupJoin.JoinSupport
public void b(Throwable th) {
if (ExceptionHelper.a(this.f, th)) {
this.j.decrementAndGet();
b();
} else {
RxJavaPlugins.b(th);
}
}
}
interface JoinSupport {
void a(LeftRightObserver leftRightObserver);
void a(Throwable th);
void a(boolean z, LeftRightEndObserver leftRightEndObserver);
void a(boolean z, Object obj);
void b(Throwable th);
}
static final class LeftRightEndObserver extends AtomicReference<Disposable> implements Observer<Object>, Disposable {
final JoinSupport a;
final boolean b;
final int c;
LeftRightEndObserver(JoinSupport joinSupport, boolean z, int i) {
this.a = joinSupport;
this.b = z;
this.c = i;
}
@Override // io.reactivex.disposables.Disposable
public void dispose() {
DisposableHelper.dispose(this);
}
@Override // io.reactivex.Observer
public void onComplete() {
this.a.a(this.b, this);
}
@Override // io.reactivex.Observer
public void onError(Throwable th) {
this.a.a(th);
}
@Override // io.reactivex.Observer
public void onNext(Object obj) {
if (DisposableHelper.dispose(this)) {
this.a.a(this.b, this);
}
}
@Override // io.reactivex.Observer
public void onSubscribe(Disposable disposable) {
DisposableHelper.setOnce(this, disposable);
}
}
static final class LeftRightObserver extends AtomicReference<Disposable> implements Observer<Object>, Disposable {
final JoinSupport a;
final boolean b;
LeftRightObserver(JoinSupport joinSupport, boolean z) {
this.a = joinSupport;
this.b = z;
}
@Override // io.reactivex.disposables.Disposable
public void dispose() {
DisposableHelper.dispose(this);
}
@Override // io.reactivex.Observer
public void onComplete() {
this.a.a(this);
}
@Override // io.reactivex.Observer
public void onError(Throwable th) {
this.a.b(th);
}
@Override // io.reactivex.Observer
public void onNext(Object obj) {
this.a.a(this.b, obj);
}
@Override // io.reactivex.Observer
public void onSubscribe(Disposable disposable) {
DisposableHelper.setOnce(this, disposable);
}
}
public ObservableGroupJoin(ObservableSource<TLeft> observableSource, ObservableSource<? extends TRight> observableSource2, Function<? super TLeft, ? extends ObservableSource<TLeftEnd>> function, Function<? super TRight, ? extends ObservableSource<TRightEnd>> function2, BiFunction<? super TLeft, ? super Observable<TRight>, ? extends R> biFunction) {
super(observableSource);
this.b = observableSource2;
this.c = function;
this.d = function2;
this.e = biFunction;
}
@Override // io.reactivex.Observable
protected void subscribeActual(Observer<? super R> observer) {
GroupJoinDisposable groupJoinDisposable = new GroupJoinDisposable(observer, this.c, this.d, this.e);
observer.onSubscribe(groupJoinDisposable);
LeftRightObserver leftRightObserver = new LeftRightObserver(groupJoinDisposable, true);
groupJoinDisposable.c.b(leftRightObserver);
LeftRightObserver leftRightObserver2 = new LeftRightObserver(groupJoinDisposable, false);
groupJoinDisposable.c.b(leftRightObserver2);
this.a.subscribe(leftRightObserver);
this.b.subscribe(leftRightObserver2);
}
}