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

204 lines
6.3 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.internal.disposables.DisposableHelper;
import io.reactivex.subjects.UnicastSubject;
import java.util.ArrayDeque;
import java.util.Iterator;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
/* loaded from: classes2.dex */
public final class ObservableWindow<T> extends AbstractObservableWithUpstream<T, Observable<T>> {
final long b;
final long c;
final int d;
static final class WindowExactObserver<T> extends AtomicInteger implements Observer<T>, Disposable, Runnable {
final Observer<? super Observable<T>> a;
final long b;
final int c;
long d;
Disposable e;
UnicastSubject<T> f;
volatile boolean g;
WindowExactObserver(Observer<? super Observable<T>> observer, long j, int i) {
this.a = observer;
this.b = j;
this.c = i;
}
@Override // io.reactivex.disposables.Disposable
public void dispose() {
this.g = true;
}
@Override // io.reactivex.Observer
public void onComplete() {
UnicastSubject<T> unicastSubject = this.f;
if (unicastSubject != null) {
this.f = null;
unicastSubject.onComplete();
}
this.a.onComplete();
}
@Override // io.reactivex.Observer
public void onError(Throwable th) {
UnicastSubject<T> unicastSubject = this.f;
if (unicastSubject != null) {
this.f = null;
unicastSubject.onError(th);
}
this.a.onError(th);
}
@Override // io.reactivex.Observer
public void onNext(T t) {
UnicastSubject<T> unicastSubject = this.f;
if (unicastSubject == null && !this.g) {
unicastSubject = UnicastSubject.a(this.c, this);
this.f = unicastSubject;
this.a.onNext(unicastSubject);
}
if (unicastSubject != null) {
unicastSubject.onNext(t);
long j = this.d + 1;
this.d = j;
if (j >= this.b) {
this.d = 0L;
this.f = null;
unicastSubject.onComplete();
if (this.g) {
this.e.dispose();
}
}
}
}
@Override // io.reactivex.Observer
public void onSubscribe(Disposable disposable) {
if (DisposableHelper.validate(this.e, disposable)) {
this.e = disposable;
this.a.onSubscribe(this);
}
}
@Override // java.lang.Runnable
public void run() {
if (this.g) {
this.e.dispose();
}
}
}
static final class WindowSkipObserver<T> extends AtomicBoolean implements Observer<T>, Disposable, Runnable {
final Observer<? super Observable<T>> a;
final long b;
final long c;
final int d;
long f;
volatile boolean g;
long h;
Disposable i;
final AtomicInteger j = new AtomicInteger();
final ArrayDeque<UnicastSubject<T>> e = new ArrayDeque<>();
WindowSkipObserver(Observer<? super Observable<T>> observer, long j, long j2, int i) {
this.a = observer;
this.b = j;
this.c = j2;
this.d = i;
}
@Override // io.reactivex.disposables.Disposable
public void dispose() {
this.g = true;
}
@Override // io.reactivex.Observer
public void onComplete() {
ArrayDeque<UnicastSubject<T>> arrayDeque = this.e;
while (!arrayDeque.isEmpty()) {
arrayDeque.poll().onComplete();
}
this.a.onComplete();
}
@Override // io.reactivex.Observer
public void onError(Throwable th) {
ArrayDeque<UnicastSubject<T>> arrayDeque = this.e;
while (!arrayDeque.isEmpty()) {
arrayDeque.poll().onError(th);
}
this.a.onError(th);
}
@Override // io.reactivex.Observer
public void onNext(T t) {
ArrayDeque<UnicastSubject<T>> arrayDeque = this.e;
long j = this.f;
long j2 = this.c;
if (j % j2 == 0 && !this.g) {
this.j.getAndIncrement();
UnicastSubject<T> a = UnicastSubject.a(this.d, this);
arrayDeque.offer(a);
this.a.onNext(a);
}
long j3 = this.h + 1;
Iterator<UnicastSubject<T>> it = arrayDeque.iterator();
while (it.hasNext()) {
it.next().onNext(t);
}
if (j3 >= this.b) {
arrayDeque.poll().onComplete();
if (arrayDeque.isEmpty() && this.g) {
this.i.dispose();
return;
}
this.h = j3 - j2;
} else {
this.h = j3;
}
this.f = j + 1;
}
@Override // io.reactivex.Observer
public void onSubscribe(Disposable disposable) {
if (DisposableHelper.validate(this.i, disposable)) {
this.i = disposable;
this.a.onSubscribe(this);
}
}
@Override // java.lang.Runnable
public void run() {
if (this.j.decrementAndGet() == 0 && this.g) {
this.i.dispose();
}
}
}
public ObservableWindow(ObservableSource<T> observableSource, long j, long j2, int i) {
super(observableSource);
this.b = j;
this.c = j2;
this.d = i;
}
@Override // io.reactivex.Observable
public void subscribeActual(Observer<? super Observable<T>> observer) {
long j = this.b;
long j2 = this.c;
if (j == j2) {
this.a.subscribe(new WindowExactObserver(observer, j, this.d));
} else {
this.a.subscribe(new WindowSkipObserver(observer, j, j2, this.d));
}
}
}