247 lines
8.7 KiB
Java
247 lines
8.7 KiB
Java
package io.reactivex.internal.operators.observable;
|
|
|
|
import io.reactivex.ObservableSource;
|
|
import io.reactivex.Observer;
|
|
import io.reactivex.disposables.Disposable;
|
|
import io.reactivex.exceptions.Exceptions;
|
|
import io.reactivex.functions.Function;
|
|
import io.reactivex.internal.disposables.DisposableHelper;
|
|
import io.reactivex.internal.disposables.EmptyDisposable;
|
|
import io.reactivex.internal.functions.ObjectHelper;
|
|
import io.reactivex.internal.util.AtomicThrowable;
|
|
import io.reactivex.internal.util.HalfSerializer;
|
|
import io.reactivex.plugins.RxJavaPlugins;
|
|
import java.util.Arrays;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
import java.util.concurrent.atomic.AtomicReferenceArray;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public final class ObservableWithLatestFromMany<T, R> extends AbstractObservableWithUpstream<T, R> {
|
|
final ObservableSource<?>[] b;
|
|
final Iterable<? extends ObservableSource<?>> c;
|
|
final Function<? super Object[], R> d;
|
|
|
|
final class SingletonArrayFunc implements Function<T, R> {
|
|
SingletonArrayFunc() {
|
|
}
|
|
|
|
/* JADX WARN: Type inference failed for: r1v1, types: [java.lang.Object, java.lang.Object[]] */
|
|
@Override // io.reactivex.functions.Function
|
|
public R apply(T t) throws Exception {
|
|
R apply = ObservableWithLatestFromMany.this.d.apply(new Object[]{t});
|
|
ObjectHelper.a(apply, "The combiner returned a null value");
|
|
return apply;
|
|
}
|
|
}
|
|
|
|
static final class WithLatestInnerObserver extends AtomicReference<Disposable> implements Observer<Object> {
|
|
final WithLatestFromObserver<?, ?> a;
|
|
final int b;
|
|
boolean c;
|
|
|
|
WithLatestInnerObserver(WithLatestFromObserver<?, ?> withLatestFromObserver, int i) {
|
|
this.a = withLatestFromObserver;
|
|
this.b = i;
|
|
}
|
|
|
|
public void a() {
|
|
DisposableHelper.dispose(this);
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onComplete() {
|
|
this.a.a(this.b, this.c);
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onError(Throwable th) {
|
|
this.a.a(this.b, th);
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onNext(Object obj) {
|
|
if (!this.c) {
|
|
this.c = true;
|
|
}
|
|
this.a.a(this.b, obj);
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onSubscribe(Disposable disposable) {
|
|
DisposableHelper.setOnce(this, disposable);
|
|
}
|
|
}
|
|
|
|
public ObservableWithLatestFromMany(ObservableSource<T> observableSource, ObservableSource<?>[] observableSourceArr, Function<? super Object[], R> function) {
|
|
super(observableSource);
|
|
this.b = observableSourceArr;
|
|
this.c = null;
|
|
this.d = function;
|
|
}
|
|
|
|
@Override // io.reactivex.Observable
|
|
protected void subscribeActual(Observer<? super R> observer) {
|
|
int length;
|
|
ObservableSource<?>[] observableSourceArr = this.b;
|
|
if (observableSourceArr == null) {
|
|
observableSourceArr = new ObservableSource[8];
|
|
try {
|
|
length = 0;
|
|
for (ObservableSource<?> observableSource : this.c) {
|
|
if (length == observableSourceArr.length) {
|
|
observableSourceArr = (ObservableSource[]) Arrays.copyOf(observableSourceArr, (length >> 1) + length);
|
|
}
|
|
int i = length + 1;
|
|
observableSourceArr[length] = observableSource;
|
|
length = i;
|
|
}
|
|
} catch (Throwable th) {
|
|
Exceptions.b(th);
|
|
EmptyDisposable.error(th, observer);
|
|
return;
|
|
}
|
|
} else {
|
|
length = observableSourceArr.length;
|
|
}
|
|
if (length == 0) {
|
|
new ObservableMap(this.a, new SingletonArrayFunc()).subscribeActual(observer);
|
|
return;
|
|
}
|
|
WithLatestFromObserver withLatestFromObserver = new WithLatestFromObserver(observer, this.d, length);
|
|
observer.onSubscribe(withLatestFromObserver);
|
|
withLatestFromObserver.a(observableSourceArr, length);
|
|
this.a.subscribe(withLatestFromObserver);
|
|
}
|
|
|
|
static final class WithLatestFromObserver<T, R> extends AtomicInteger implements Observer<T>, Disposable {
|
|
final Observer<? super R> a;
|
|
final Function<? super Object[], R> b;
|
|
final WithLatestInnerObserver[] c;
|
|
final AtomicReferenceArray<Object> d;
|
|
final AtomicReference<Disposable> e;
|
|
final AtomicThrowable f;
|
|
volatile boolean g;
|
|
|
|
WithLatestFromObserver(Observer<? super R> observer, Function<? super Object[], R> function, int i) {
|
|
this.a = observer;
|
|
this.b = function;
|
|
WithLatestInnerObserver[] withLatestInnerObserverArr = new WithLatestInnerObserver[i];
|
|
for (int i2 = 0; i2 < i; i2++) {
|
|
withLatestInnerObserverArr[i2] = new WithLatestInnerObserver(this, i2);
|
|
}
|
|
this.c = withLatestInnerObserverArr;
|
|
this.d = new AtomicReferenceArray<>(i);
|
|
this.e = new AtomicReference<>();
|
|
this.f = new AtomicThrowable();
|
|
}
|
|
|
|
void a(ObservableSource<?>[] observableSourceArr, int i) {
|
|
WithLatestInnerObserver[] withLatestInnerObserverArr = this.c;
|
|
AtomicReference<Disposable> atomicReference = this.e;
|
|
for (int i2 = 0; i2 < i && !DisposableHelper.isDisposed(atomicReference.get()) && !this.g; i2++) {
|
|
observableSourceArr[i2].subscribe(withLatestInnerObserverArr[i2]);
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.disposables.Disposable
|
|
public void dispose() {
|
|
DisposableHelper.dispose(this.e);
|
|
for (WithLatestInnerObserver withLatestInnerObserver : this.c) {
|
|
withLatestInnerObserver.a();
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onComplete() {
|
|
if (this.g) {
|
|
return;
|
|
}
|
|
this.g = true;
|
|
a(-1);
|
|
HalfSerializer.a(this.a, this, this.f);
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onError(Throwable th) {
|
|
if (this.g) {
|
|
RxJavaPlugins.b(th);
|
|
return;
|
|
}
|
|
this.g = true;
|
|
a(-1);
|
|
HalfSerializer.a((Observer<?>) this.a, th, (AtomicInteger) this, this.f);
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onNext(T t) {
|
|
if (this.g) {
|
|
return;
|
|
}
|
|
AtomicReferenceArray<Object> atomicReferenceArray = this.d;
|
|
int length = atomicReferenceArray.length();
|
|
Object[] objArr = new Object[length + 1];
|
|
int i = 0;
|
|
objArr[0] = t;
|
|
while (i < length) {
|
|
Object obj = atomicReferenceArray.get(i);
|
|
if (obj == null) {
|
|
return;
|
|
}
|
|
i++;
|
|
objArr[i] = obj;
|
|
}
|
|
try {
|
|
R apply = this.b.apply(objArr);
|
|
ObjectHelper.a(apply, "combiner returned a null value");
|
|
HalfSerializer.a(this.a, apply, this, this.f);
|
|
} catch (Throwable th) {
|
|
Exceptions.b(th);
|
|
dispose();
|
|
onError(th);
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onSubscribe(Disposable disposable) {
|
|
DisposableHelper.setOnce(this.e, disposable);
|
|
}
|
|
|
|
void a(int i, Object obj) {
|
|
this.d.set(i, obj);
|
|
}
|
|
|
|
void a(int i, Throwable th) {
|
|
this.g = true;
|
|
DisposableHelper.dispose(this.e);
|
|
a(i);
|
|
HalfSerializer.a((Observer<?>) this.a, th, (AtomicInteger) this, this.f);
|
|
}
|
|
|
|
void a(int i, boolean z) {
|
|
if (z) {
|
|
return;
|
|
}
|
|
this.g = true;
|
|
a(i);
|
|
HalfSerializer.a(this.a, this, this.f);
|
|
}
|
|
|
|
void a(int i) {
|
|
WithLatestInnerObserver[] withLatestInnerObserverArr = this.c;
|
|
for (int i2 = 0; i2 < withLatestInnerObserverArr.length; i2++) {
|
|
if (i2 != i) {
|
|
withLatestInnerObserverArr[i2].a();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public ObservableWithLatestFromMany(ObservableSource<T> observableSource, Iterable<? extends ObservableSource<?>> iterable, Function<? super Object[], R> function) {
|
|
super(observableSource);
|
|
this.b = null;
|
|
this.c = iterable;
|
|
this.d = function;
|
|
}
|
|
}
|