255 lines
8.8 KiB
Java
255 lines
8.8 KiB
Java
package io.reactivex.internal.operators.observable;
|
|
|
|
import io.reactivex.Observable;
|
|
import io.reactivex.ObservableSource;
|
|
import io.reactivex.Observer;
|
|
import io.reactivex.disposables.Disposable;
|
|
import io.reactivex.exceptions.Exceptions;
|
|
import io.reactivex.internal.disposables.DisposableHelper;
|
|
import io.reactivex.internal.functions.ObjectHelper;
|
|
import io.reactivex.internal.queue.MpscLinkedQueue;
|
|
import io.reactivex.internal.util.AtomicThrowable;
|
|
import io.reactivex.observers.DisposableObserver;
|
|
import io.reactivex.plugins.RxJavaPlugins;
|
|
import io.reactivex.subjects.UnicastSubject;
|
|
import java.util.concurrent.Callable;
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public final class ObservableWindowBoundarySupplier<T, B> extends AbstractObservableWithUpstream<T, Observable<T>> {
|
|
final Callable<? extends ObservableSource<B>> b;
|
|
final int c;
|
|
|
|
static final class WindowBoundaryInnerObserver<T, B> extends DisposableObserver<B> {
|
|
final WindowBoundaryMainObserver<T, B> b;
|
|
boolean c;
|
|
|
|
WindowBoundaryInnerObserver(WindowBoundaryMainObserver<T, B> windowBoundaryMainObserver) {
|
|
this.b = windowBoundaryMainObserver;
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onComplete() {
|
|
if (this.c) {
|
|
return;
|
|
}
|
|
this.c = true;
|
|
this.b.c();
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onError(Throwable th) {
|
|
if (this.c) {
|
|
RxJavaPlugins.b(th);
|
|
} else {
|
|
this.c = true;
|
|
this.b.a(th);
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onNext(B b) {
|
|
if (this.c) {
|
|
return;
|
|
}
|
|
this.c = true;
|
|
dispose();
|
|
this.b.a(this);
|
|
}
|
|
}
|
|
|
|
public ObservableWindowBoundarySupplier(ObservableSource<T> observableSource, Callable<? extends ObservableSource<B>> callable, int i) {
|
|
super(observableSource);
|
|
this.b = callable;
|
|
this.c = i;
|
|
}
|
|
|
|
@Override // io.reactivex.Observable
|
|
public void subscribeActual(Observer<? super Observable<T>> observer) {
|
|
this.a.subscribe(new WindowBoundaryMainObserver(observer, this.c, this.b));
|
|
}
|
|
|
|
static final class WindowBoundaryMainObserver<T, B> extends AtomicInteger implements Observer<T>, Disposable, Runnable {
|
|
static final WindowBoundaryInnerObserver<Object, Object> l = new WindowBoundaryInnerObserver<>(null);
|
|
static final Object m = new Object();
|
|
final Observer<? super Observable<T>> a;
|
|
final int b;
|
|
final AtomicReference<WindowBoundaryInnerObserver<T, B>> c = new AtomicReference<>();
|
|
final AtomicInteger d = new AtomicInteger(1);
|
|
final MpscLinkedQueue<Object> e = new MpscLinkedQueue<>();
|
|
final AtomicThrowable f = new AtomicThrowable();
|
|
final AtomicBoolean g = new AtomicBoolean();
|
|
final Callable<? extends ObservableSource<B>> h;
|
|
Disposable i;
|
|
volatile boolean j;
|
|
UnicastSubject<T> k;
|
|
|
|
WindowBoundaryMainObserver(Observer<? super Observable<T>> observer, int i, Callable<? extends ObservableSource<B>> callable) {
|
|
this.a = observer;
|
|
this.b = i;
|
|
this.h = callable;
|
|
}
|
|
|
|
void a() {
|
|
Disposable disposable = (Disposable) this.c.getAndSet(l);
|
|
if (disposable == null || disposable == l) {
|
|
return;
|
|
}
|
|
disposable.dispose();
|
|
}
|
|
|
|
/* JADX WARN: Multi-variable type inference failed */
|
|
void b() {
|
|
if (getAndIncrement() != 0) {
|
|
return;
|
|
}
|
|
Observer<? super Observable<T>> observer = this.a;
|
|
MpscLinkedQueue<Object> mpscLinkedQueue = this.e;
|
|
AtomicThrowable atomicThrowable = this.f;
|
|
int i = 1;
|
|
while (this.d.get() != 0) {
|
|
UnicastSubject<T> unicastSubject = this.k;
|
|
boolean z = this.j;
|
|
if (z && atomicThrowable.get() != null) {
|
|
mpscLinkedQueue.clear();
|
|
Throwable terminate = atomicThrowable.terminate();
|
|
if (unicastSubject != 0) {
|
|
this.k = null;
|
|
unicastSubject.onError(terminate);
|
|
}
|
|
observer.onError(terminate);
|
|
return;
|
|
}
|
|
Object poll = mpscLinkedQueue.poll();
|
|
boolean z2 = poll == null;
|
|
if (z && z2) {
|
|
Throwable terminate2 = atomicThrowable.terminate();
|
|
if (terminate2 == null) {
|
|
if (unicastSubject != 0) {
|
|
this.k = null;
|
|
unicastSubject.onComplete();
|
|
}
|
|
observer.onComplete();
|
|
return;
|
|
}
|
|
if (unicastSubject != 0) {
|
|
this.k = null;
|
|
unicastSubject.onError(terminate2);
|
|
}
|
|
observer.onError(terminate2);
|
|
return;
|
|
}
|
|
if (z2) {
|
|
i = addAndGet(-i);
|
|
if (i == 0) {
|
|
return;
|
|
}
|
|
} else if (poll != m) {
|
|
unicastSubject.onNext(poll);
|
|
} else {
|
|
if (unicastSubject != 0) {
|
|
this.k = null;
|
|
unicastSubject.onComplete();
|
|
}
|
|
if (!this.g.get()) {
|
|
UnicastSubject<T> a = UnicastSubject.a(this.b, this);
|
|
this.k = a;
|
|
this.d.getAndIncrement();
|
|
try {
|
|
ObservableSource<B> call = this.h.call();
|
|
ObjectHelper.a(call, "The other Callable returned a null ObservableSource");
|
|
ObservableSource<B> observableSource = call;
|
|
WindowBoundaryInnerObserver<T, B> windowBoundaryInnerObserver = new WindowBoundaryInnerObserver<>(this);
|
|
if (this.c.compareAndSet(null, windowBoundaryInnerObserver)) {
|
|
observableSource.subscribe(windowBoundaryInnerObserver);
|
|
observer.onNext(a);
|
|
}
|
|
} catch (Throwable th) {
|
|
Exceptions.b(th);
|
|
atomicThrowable.addThrowable(th);
|
|
this.j = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
mpscLinkedQueue.clear();
|
|
this.k = null;
|
|
}
|
|
|
|
void c() {
|
|
this.i.dispose();
|
|
this.j = true;
|
|
b();
|
|
}
|
|
|
|
@Override // io.reactivex.disposables.Disposable
|
|
public void dispose() {
|
|
if (this.g.compareAndSet(false, true)) {
|
|
a();
|
|
if (this.d.decrementAndGet() == 0) {
|
|
this.i.dispose();
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onComplete() {
|
|
a();
|
|
this.j = true;
|
|
b();
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onError(Throwable th) {
|
|
a();
|
|
if (!this.f.addThrowable(th)) {
|
|
RxJavaPlugins.b(th);
|
|
} else {
|
|
this.j = true;
|
|
b();
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onNext(T t) {
|
|
this.e.offer(t);
|
|
b();
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onSubscribe(Disposable disposable) {
|
|
if (DisposableHelper.validate(this.i, disposable)) {
|
|
this.i = disposable;
|
|
this.a.onSubscribe(this);
|
|
this.e.offer(m);
|
|
b();
|
|
}
|
|
}
|
|
|
|
@Override // java.lang.Runnable
|
|
public void run() {
|
|
if (this.d.decrementAndGet() == 0) {
|
|
this.i.dispose();
|
|
}
|
|
}
|
|
|
|
void a(WindowBoundaryInnerObserver<T, B> windowBoundaryInnerObserver) {
|
|
this.c.compareAndSet(windowBoundaryInnerObserver, null);
|
|
this.e.offer(m);
|
|
b();
|
|
}
|
|
|
|
void a(Throwable th) {
|
|
this.i.dispose();
|
|
if (this.f.addThrowable(th)) {
|
|
this.j = true;
|
|
b();
|
|
} else {
|
|
RxJavaPlugins.b(th);
|
|
}
|
|
}
|
|
}
|
|
}
|