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

226 lines
8.5 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.Consumer;
import io.reactivex.internal.disposables.DisposableHelper;
import io.reactivex.internal.fuseable.HasUpstreamObservableSource;
import io.reactivex.internal.util.ExceptionHelper;
import io.reactivex.observables.ConnectableObservable;
import io.reactivex.plugins.RxJavaPlugins;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
/* loaded from: classes2.dex */
public final class ObservablePublish<T> extends ConnectableObservable<T> implements HasUpstreamObservableSource<T> {
final ObservableSource<T> a;
final AtomicReference<PublishObserver<T>> b;
final ObservableSource<T> c;
static final class InnerDisposable<T> extends AtomicReference<Object> implements Disposable {
final Observer<? super T> a;
InnerDisposable(Observer<? super T> observer) {
this.a = observer;
}
void a(PublishObserver<T> publishObserver) {
if (compareAndSet(null, publishObserver)) {
return;
}
publishObserver.b(this);
}
@Override // io.reactivex.disposables.Disposable
public void dispose() {
Object andSet = getAndSet(this);
if (andSet == null || andSet == this) {
return;
}
((PublishObserver) andSet).b(this);
}
}
static final class PublishObserver<T> implements Observer<T>, Disposable {
static final InnerDisposable[] e = new InnerDisposable[0];
static final InnerDisposable[] f = new InnerDisposable[0];
final AtomicReference<PublishObserver<T>> a;
final AtomicReference<Disposable> d = new AtomicReference<>();
final AtomicReference<InnerDisposable<T>[]> b = new AtomicReference<>(e);
final AtomicBoolean c = new AtomicBoolean();
PublishObserver(AtomicReference<PublishObserver<T>> atomicReference) {
this.a = atomicReference;
}
public boolean a() {
return this.b.get() == f;
}
void b(InnerDisposable<T> innerDisposable) {
InnerDisposable<T>[] innerDisposableArr;
InnerDisposable<T>[] innerDisposableArr2;
do {
innerDisposableArr = this.b.get();
int length = innerDisposableArr.length;
if (length == 0) {
return;
}
int i = -1;
int i2 = 0;
while (true) {
if (i2 >= length) {
break;
}
if (innerDisposableArr[i2].equals(innerDisposable)) {
i = i2;
break;
}
i2++;
}
if (i < 0) {
return;
}
if (length == 1) {
innerDisposableArr2 = e;
} else {
InnerDisposable<T>[] innerDisposableArr3 = new InnerDisposable[length - 1];
System.arraycopy(innerDisposableArr, 0, innerDisposableArr3, 0, i);
System.arraycopy(innerDisposableArr, i + 1, innerDisposableArr3, i, (length - i) - 1);
innerDisposableArr2 = innerDisposableArr3;
}
} while (!this.b.compareAndSet(innerDisposableArr, innerDisposableArr2));
}
@Override // io.reactivex.disposables.Disposable
public void dispose() {
if (this.b.getAndSet(f) != f) {
this.a.compareAndSet(this, null);
DisposableHelper.dispose(this.d);
}
}
@Override // io.reactivex.Observer
public void onComplete() {
this.a.compareAndSet(this, null);
for (InnerDisposable<T> innerDisposable : this.b.getAndSet(f)) {
innerDisposable.a.onComplete();
}
}
@Override // io.reactivex.Observer
public void onError(Throwable th) {
this.a.compareAndSet(this, null);
InnerDisposable<T>[] andSet = this.b.getAndSet(f);
if (andSet.length == 0) {
RxJavaPlugins.b(th);
return;
}
for (InnerDisposable<T> innerDisposable : andSet) {
innerDisposable.a.onError(th);
}
}
@Override // io.reactivex.Observer
public void onNext(T t) {
for (InnerDisposable<T> innerDisposable : this.b.get()) {
innerDisposable.a.onNext(t);
}
}
@Override // io.reactivex.Observer
public void onSubscribe(Disposable disposable) {
DisposableHelper.setOnce(this.d, disposable);
}
boolean a(InnerDisposable<T> innerDisposable) {
InnerDisposable<T>[] innerDisposableArr;
InnerDisposable<T>[] innerDisposableArr2;
do {
innerDisposableArr = this.b.get();
if (innerDisposableArr == f) {
return false;
}
int length = innerDisposableArr.length;
innerDisposableArr2 = new InnerDisposable[length + 1];
System.arraycopy(innerDisposableArr, 0, innerDisposableArr2, 0, length);
innerDisposableArr2[length] = innerDisposable;
} while (!this.b.compareAndSet(innerDisposableArr, innerDisposableArr2));
return true;
}
}
static final class PublishSource<T> implements ObservableSource<T> {
private final AtomicReference<PublishObserver<T>> a;
PublishSource(AtomicReference<PublishObserver<T>> atomicReference) {
this.a = atomicReference;
}
@Override // io.reactivex.ObservableSource
public void subscribe(Observer<? super T> observer) {
InnerDisposable innerDisposable = new InnerDisposable(observer);
observer.onSubscribe(innerDisposable);
while (true) {
PublishObserver<T> publishObserver = this.a.get();
if (publishObserver == null || publishObserver.a()) {
PublishObserver<T> publishObserver2 = new PublishObserver<>(this.a);
if (this.a.compareAndSet(publishObserver, publishObserver2)) {
publishObserver = publishObserver2;
} else {
continue;
}
}
if (publishObserver.a(innerDisposable)) {
innerDisposable.a(publishObserver);
return;
}
}
}
}
private ObservablePublish(ObservableSource<T> observableSource, ObservableSource<T> observableSource2, AtomicReference<PublishObserver<T>> atomicReference) {
this.c = observableSource;
this.a = observableSource2;
this.b = atomicReference;
}
public static <T> ConnectableObservable<T> a(ObservableSource<T> observableSource) {
AtomicReference atomicReference = new AtomicReference();
return RxJavaPlugins.a((ConnectableObservable) new ObservablePublish(new PublishSource(atomicReference), observableSource, atomicReference));
}
@Override // io.reactivex.Observable
protected void subscribeActual(Observer<? super T> observer) {
this.c.subscribe(observer);
}
@Override // io.reactivex.observables.ConnectableObservable
public void a(Consumer<? super Disposable> consumer) {
PublishObserver<T> publishObserver;
while (true) {
publishObserver = this.b.get();
if (publishObserver != null && !publishObserver.a()) {
break;
}
PublishObserver<T> publishObserver2 = new PublishObserver<>(this.b);
if (this.b.compareAndSet(publishObserver, publishObserver2)) {
publishObserver = publishObserver2;
break;
}
}
boolean z = !publishObserver.c.get() && publishObserver.c.compareAndSet(false, true);
try {
consumer.accept(publishObserver);
if (z) {
this.a.subscribe(publishObserver);
}
} catch (Throwable th) {
Exceptions.b(th);
throw ExceptionHelper.a(th);
}
}
}