Initial commit
This commit is contained in:
@@ -0,0 +1,257 @@
|
||||
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.functions.ObjectHelper;
|
||||
import io.reactivex.internal.operators.observable.ObservableGroupJoin;
|
||||
import io.reactivex.internal.queue.SpscLinkedArrayQueue;
|
||||
import io.reactivex.internal.util.ExceptionHelper;
|
||||
import io.reactivex.plugins.RxJavaPlugins;
|
||||
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 ObservableJoin<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 TRight, ? extends R> e;
|
||||
|
||||
static final class JoinDisposable<TLeft, TRight, TLeftEnd, TRightEnd, R> extends AtomicInteger implements Disposable, ObservableGroupJoin.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 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, TLeft> d = new LinkedHashMap();
|
||||
final Map<Integer, TRight> e = new LinkedHashMap();
|
||||
final AtomicReference<Throwable> f = new AtomicReference<>();
|
||||
final AtomicInteger j = new AtomicInteger(2);
|
||||
|
||||
JoinDisposable(Observer<? super R> observer, Function<? super TLeft, ? extends ObservableSource<TLeftEnd>> function, Function<? super TRight, ? extends ObservableSource<TRightEnd>> function2, BiFunction<? super TLeft, ? super 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) {
|
||||
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) {
|
||||
int i2 = this.k;
|
||||
this.k = i2 + 1;
|
||||
this.d.put(Integer.valueOf(i2), poll);
|
||||
try {
|
||||
ObservableSource apply = this.g.apply(poll);
|
||||
ObjectHelper.a(apply, "The leftEnd returned a null ObservableSource");
|
||||
ObservableSource observableSource = apply;
|
||||
ObservableGroupJoin.LeftRightEndObserver leftRightEndObserver = new ObservableGroupJoin.LeftRightEndObserver(this, true, i2);
|
||||
this.c.b(leftRightEndObserver);
|
||||
observableSource.subscribe(leftRightEndObserver);
|
||||
if (this.f.get() != null) {
|
||||
spscLinkedArrayQueue.clear();
|
||||
a();
|
||||
a(observer);
|
||||
return;
|
||||
}
|
||||
Iterator<TRight> it = this.e.values().iterator();
|
||||
while (it.hasNext()) {
|
||||
try {
|
||||
R apply2 = this.i.apply(poll, it.next());
|
||||
ObjectHelper.a(apply2, "The resultSelector returned a null value");
|
||||
observer.onNext(apply2);
|
||||
} 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;
|
||||
ObservableGroupJoin.LeftRightEndObserver leftRightEndObserver2 = new ObservableGroupJoin.LeftRightEndObserver(this, false, i3);
|
||||
this.c.b(leftRightEndObserver2);
|
||||
observableSource2.subscribe(leftRightEndObserver2);
|
||||
if (this.f.get() != null) {
|
||||
spscLinkedArrayQueue.clear();
|
||||
a();
|
||||
a(observer);
|
||||
return;
|
||||
}
|
||||
Iterator<TLeft> it2 = this.d.values().iterator();
|
||||
while (it2.hasNext()) {
|
||||
try {
|
||||
R apply4 = this.i.apply(it2.next(), poll);
|
||||
ObjectHelper.a(apply4, "The resultSelector returned a null value");
|
||||
observer.onNext(apply4);
|
||||
} catch (Throwable th3) {
|
||||
a(th3, observer, spscLinkedArrayQueue);
|
||||
return;
|
||||
}
|
||||
}
|
||||
} catch (Throwable th4) {
|
||||
a(th4, observer, spscLinkedArrayQueue);
|
||||
return;
|
||||
}
|
||||
} else if (num == p) {
|
||||
ObservableGroupJoin.LeftRightEndObserver leftRightEndObserver3 = (ObservableGroupJoin.LeftRightEndObserver) poll;
|
||||
this.d.remove(Integer.valueOf(leftRightEndObserver3.c));
|
||||
this.c.a(leftRightEndObserver3);
|
||||
} else {
|
||||
ObservableGroupJoin.LeftRightEndObserver leftRightEndObserver4 = (ObservableGroupJoin.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);
|
||||
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(ObservableGroupJoin.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, ObservableGroupJoin.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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ObservableJoin(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 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) {
|
||||
JoinDisposable joinDisposable = new JoinDisposable(observer, this.c, this.d, this.e);
|
||||
observer.onSubscribe(joinDisposable);
|
||||
ObservableGroupJoin.LeftRightObserver leftRightObserver = new ObservableGroupJoin.LeftRightObserver(joinDisposable, true);
|
||||
joinDisposable.c.b(leftRightObserver);
|
||||
ObservableGroupJoin.LeftRightObserver leftRightObserver2 = new ObservableGroupJoin.LeftRightObserver(joinDisposable, false);
|
||||
joinDisposable.c.b(leftRightObserver2);
|
||||
this.a.subscribe(leftRightObserver);
|
||||
this.b.subscribe(leftRightObserver2);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user