![JAR search and dependency download from the Maven repository](/logo.png)
mutiny.zero.internal.BufferingTubeBase Maven / Gradle / Ivy
package mutiny.zero.internal;
import java.util.Queue;
import org.reactivestreams.Subscriber;
public abstract class BufferingTubeBase extends TubeBase {
private final int bufferSize;
protected boolean delayedComplete = false;
public BufferingTubeBase(Subscriber super T> subscriber, int bufferSize) {
super(subscriber);
this.bufferSize = bufferSize;
}
abstract Queue overflowQueue();
@Override
public void request(long n) {
if (cancelled) {
return;
}
if (n <= 0L) {
fail(Helper.negativeRequest(n));
} else {
if (overflowQueue().isEmpty()) {
super.request(n);
return;
}
long remaining = n;
T bufferedItem;
do {
bufferedItem = overflowQueue().poll();
if (bufferedItem != null) {
dispatchQueue.offer(bufferedItem);
remaining--;
}
} while (bufferedItem != null && remaining > 0L);
Helper.add(requested, n);
requestConsumer.accept(n);
completed = delayedComplete && overflowQueue().isEmpty();
}
drainLoop();
}
@Override
public void complete() {
if (overflowQueue().isEmpty()) {
super.complete();
} else {
delayedComplete = true;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy