mirror of
https://github.com/VibedByKaKi/alexandroid.git
synced 2026-11-15 10:27:17 +01:00
127 lines
3.9 KiB
Java
127 lines
3.9 KiB
Java
package io.reactivex.rxjava3.internal.queue;
|
|
|
|
import io.reactivex.rxjava3.annotations.Nullable;
|
|
import io.reactivex.rxjava3.operators.SimplePlainQueue;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
import rx.Single$$ExternalSyntheticBUOutline0;
|
|
|
|
/* compiled from: r8-map-id-b9432e0f623b4a4bff4ba50a8a24c4aafad2c1e11092747b9fb5e6a22af5a940 */
|
|
/* loaded from: classes10.dex */
|
|
public final class MpscLinkedQueue<T> implements SimplePlainQueue<T> {
|
|
private final AtomicReference<LinkedQueueNode<T>> producerNode = new AtomicReference<>();
|
|
private final AtomicReference<LinkedQueueNode<T>> consumerNode = new AtomicReference<>();
|
|
|
|
public MpscLinkedQueue() {
|
|
LinkedQueueNode<T> linkedQueueNode = new LinkedQueueNode<>();
|
|
spConsumerNode(linkedQueueNode);
|
|
xchgProducerNode(linkedQueueNode);
|
|
}
|
|
|
|
@Override // io.reactivex.rxjava3.operators.SimpleQueue
|
|
public void clear() {
|
|
while (poll() != null && !isEmpty()) {
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.rxjava3.operators.SimpleQueue
|
|
public boolean isEmpty() {
|
|
return lvConsumerNode() == lvProducerNode();
|
|
}
|
|
|
|
public LinkedQueueNode<T> lpConsumerNode() {
|
|
return this.consumerNode.get();
|
|
}
|
|
|
|
public LinkedQueueNode<T> lvConsumerNode() {
|
|
return this.consumerNode.get();
|
|
}
|
|
|
|
public LinkedQueueNode<T> lvProducerNode() {
|
|
return this.producerNode.get();
|
|
}
|
|
|
|
@Override // io.reactivex.rxjava3.operators.SimpleQueue
|
|
public boolean offer(T t) {
|
|
if (t == null) {
|
|
Single$$ExternalSyntheticBUOutline0.m$1("Null is not a valid element");
|
|
return false;
|
|
}
|
|
LinkedQueueNode<T> linkedQueueNode = new LinkedQueueNode<>(t);
|
|
xchgProducerNode(linkedQueueNode).soNext(linkedQueueNode);
|
|
return true;
|
|
}
|
|
|
|
@Override // io.reactivex.rxjava3.operators.SimplePlainQueue, io.reactivex.rxjava3.operators.SimpleQueue
|
|
@Nullable
|
|
public T poll() {
|
|
LinkedQueueNode<T> lvNext;
|
|
LinkedQueueNode<T> lpConsumerNode = lpConsumerNode();
|
|
LinkedQueueNode<T> lvNext2 = lpConsumerNode.lvNext();
|
|
if (lvNext2 != null) {
|
|
T andNullValue = lvNext2.getAndNullValue();
|
|
spConsumerNode(lvNext2);
|
|
lpConsumerNode.soNext(null);
|
|
return andNullValue;
|
|
}
|
|
if (lpConsumerNode == lvProducerNode()) {
|
|
return null;
|
|
}
|
|
do {
|
|
lvNext = lpConsumerNode.lvNext();
|
|
} while (lvNext == null);
|
|
T andNullValue2 = lvNext.getAndNullValue();
|
|
spConsumerNode(lvNext);
|
|
lpConsumerNode.soNext(null);
|
|
return andNullValue2;
|
|
}
|
|
|
|
public void spConsumerNode(LinkedQueueNode<T> linkedQueueNode) {
|
|
this.consumerNode.lazySet(linkedQueueNode);
|
|
}
|
|
|
|
public LinkedQueueNode<T> xchgProducerNode(LinkedQueueNode<T> linkedQueueNode) {
|
|
return this.producerNode.getAndSet(linkedQueueNode);
|
|
}
|
|
|
|
/* compiled from: r8-map-id-b9432e0f623b4a4bff4ba50a8a24c4aafad2c1e11092747b9fb5e6a22af5a940 */
|
|
public static final class LinkedQueueNode<E> extends AtomicReference<LinkedQueueNode<E>> {
|
|
private static final long serialVersionUID = 2404266111789071508L;
|
|
private E value;
|
|
|
|
public LinkedQueueNode(E e) {
|
|
spValue(e);
|
|
}
|
|
|
|
public E getAndNullValue() {
|
|
E lpValue = lpValue();
|
|
spValue(null);
|
|
return lpValue;
|
|
}
|
|
|
|
public E lpValue() {
|
|
return this.value;
|
|
}
|
|
|
|
public LinkedQueueNode<E> lvNext() {
|
|
return get();
|
|
}
|
|
|
|
public void soNext(LinkedQueueNode<E> linkedQueueNode) {
|
|
lazySet(linkedQueueNode);
|
|
}
|
|
|
|
public void spValue(E e) {
|
|
this.value = e;
|
|
}
|
|
|
|
public LinkedQueueNode() {
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.rxjava3.operators.SimpleQueue
|
|
public boolean offer(T t, T t2) {
|
|
offer(t);
|
|
offer(t2);
|
|
return true;
|
|
}
|
|
}
|