218 lines
7.8 KiB
Java
218 lines
7.8 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.internal.disposables.DisposableHelper;
|
|
import io.reactivex.internal.disposables.EmptyDisposable;
|
|
import io.reactivex.internal.functions.ObjectHelper;
|
|
import io.reactivex.internal.observers.QueueDrainObserver;
|
|
import io.reactivex.internal.queue.MpscLinkedQueue;
|
|
import io.reactivex.internal.util.QueueDrainHelper;
|
|
import io.reactivex.observers.DisposableObserver;
|
|
import io.reactivex.observers.SerializedObserver;
|
|
import io.reactivex.plugins.RxJavaPlugins;
|
|
import java.util.Collection;
|
|
import java.util.concurrent.Callable;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public final class ObservableBufferBoundarySupplier<T, U extends Collection<? super T>, B> extends AbstractObservableWithUpstream<T, U> {
|
|
final Callable<? extends ObservableSource<B>> b;
|
|
final Callable<U> c;
|
|
|
|
static final class BufferBoundaryObserver<T, U extends Collection<? super T>, B> extends DisposableObserver<B> {
|
|
final BufferBoundarySupplierObserver<T, U, B> b;
|
|
boolean c;
|
|
|
|
BufferBoundaryObserver(BufferBoundarySupplierObserver<T, U, B> bufferBoundarySupplierObserver) {
|
|
this.b = bufferBoundarySupplierObserver;
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onComplete() {
|
|
if (this.c) {
|
|
return;
|
|
}
|
|
this.c = true;
|
|
this.b.j();
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onError(Throwable th) {
|
|
if (this.c) {
|
|
RxJavaPlugins.b(th);
|
|
} else {
|
|
this.c = true;
|
|
this.b.onError(th);
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onNext(B b) {
|
|
if (this.c) {
|
|
return;
|
|
}
|
|
this.c = true;
|
|
dispose();
|
|
this.b.j();
|
|
}
|
|
}
|
|
|
|
static final class BufferBoundarySupplierObserver<T, U extends Collection<? super T>, B> extends QueueDrainObserver<T, U, U> implements Observer<T>, Disposable {
|
|
final Callable<U> g;
|
|
final Callable<? extends ObservableSource<B>> h;
|
|
Disposable i;
|
|
final AtomicReference<Disposable> j;
|
|
U k;
|
|
|
|
BufferBoundarySupplierObserver(Observer<? super U> observer, Callable<U> callable, Callable<? extends ObservableSource<B>> callable2) {
|
|
super(observer, new MpscLinkedQueue());
|
|
this.j = new AtomicReference<>();
|
|
this.g = callable;
|
|
this.h = callable2;
|
|
}
|
|
|
|
/* JADX WARN: Multi-variable type inference failed */
|
|
@Override // io.reactivex.internal.observers.QueueDrainObserver, io.reactivex.internal.util.ObservableQueueDrain
|
|
public /* bridge */ /* synthetic */ void a(Observer observer, Object obj) {
|
|
a((Observer<? super Observer>) observer, (Observer) obj);
|
|
}
|
|
|
|
@Override // io.reactivex.disposables.Disposable
|
|
public void dispose() {
|
|
if (this.d) {
|
|
return;
|
|
}
|
|
this.d = true;
|
|
this.i.dispose();
|
|
f();
|
|
if (d()) {
|
|
this.c.clear();
|
|
}
|
|
}
|
|
|
|
void f() {
|
|
DisposableHelper.dispose(this.j);
|
|
}
|
|
|
|
void j() {
|
|
try {
|
|
U call = this.g.call();
|
|
ObjectHelper.a(call, "The buffer supplied is null");
|
|
U u = call;
|
|
try {
|
|
ObservableSource<B> call2 = this.h.call();
|
|
ObjectHelper.a(call2, "The boundary ObservableSource supplied is null");
|
|
ObservableSource<B> observableSource = call2;
|
|
BufferBoundaryObserver bufferBoundaryObserver = new BufferBoundaryObserver(this);
|
|
if (DisposableHelper.replace(this.j, bufferBoundaryObserver)) {
|
|
synchronized (this) {
|
|
U u2 = this.k;
|
|
if (u2 == null) {
|
|
return;
|
|
}
|
|
this.k = u;
|
|
observableSource.subscribe(bufferBoundaryObserver);
|
|
a(u2, false, this);
|
|
}
|
|
}
|
|
} catch (Throwable th) {
|
|
Exceptions.b(th);
|
|
this.d = true;
|
|
this.i.dispose();
|
|
this.b.onError(th);
|
|
}
|
|
} catch (Throwable th2) {
|
|
Exceptions.b(th2);
|
|
dispose();
|
|
this.b.onError(th2);
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onComplete() {
|
|
synchronized (this) {
|
|
U u = this.k;
|
|
if (u == null) {
|
|
return;
|
|
}
|
|
this.k = null;
|
|
this.c.offer(u);
|
|
this.e = true;
|
|
if (d()) {
|
|
QueueDrainHelper.a(this.c, this.b, false, this, this);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onError(Throwable th) {
|
|
dispose();
|
|
this.b.onError(th);
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onNext(T t) {
|
|
synchronized (this) {
|
|
U u = this.k;
|
|
if (u == null) {
|
|
return;
|
|
}
|
|
u.add(t);
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.Observer
|
|
public void onSubscribe(Disposable disposable) {
|
|
if (DisposableHelper.validate(this.i, disposable)) {
|
|
this.i = disposable;
|
|
Observer<? super V> observer = this.b;
|
|
try {
|
|
U call = this.g.call();
|
|
ObjectHelper.a(call, "The buffer supplied is null");
|
|
this.k = call;
|
|
try {
|
|
ObservableSource<B> call2 = this.h.call();
|
|
ObjectHelper.a(call2, "The boundary ObservableSource supplied is null");
|
|
ObservableSource<B> observableSource = call2;
|
|
BufferBoundaryObserver bufferBoundaryObserver = new BufferBoundaryObserver(this);
|
|
this.j.set(bufferBoundaryObserver);
|
|
observer.onSubscribe(this);
|
|
if (this.d) {
|
|
return;
|
|
}
|
|
observableSource.subscribe(bufferBoundaryObserver);
|
|
} catch (Throwable th) {
|
|
Exceptions.b(th);
|
|
this.d = true;
|
|
disposable.dispose();
|
|
EmptyDisposable.error(th, observer);
|
|
}
|
|
} catch (Throwable th2) {
|
|
Exceptions.b(th2);
|
|
this.d = true;
|
|
disposable.dispose();
|
|
EmptyDisposable.error(th2, observer);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void a(Observer<? super U> observer, U u) {
|
|
this.b.onNext(u);
|
|
}
|
|
}
|
|
|
|
public ObservableBufferBoundarySupplier(ObservableSource<T> observableSource, Callable<? extends ObservableSource<B>> callable, Callable<U> callable2) {
|
|
super(observableSource);
|
|
this.b = callable;
|
|
this.c = callable2;
|
|
}
|
|
|
|
@Override // io.reactivex.Observable
|
|
protected void subscribeActual(Observer<? super U> observer) {
|
|
this.a.subscribe(new BufferBoundarySupplierObserver(new SerializedObserver(observer), this.c, this.b));
|
|
}
|
|
}
|