/** * Get an element from the source, pushing it into the sink chain, * setting up the buffer if needed * @return whether there are elements to consume from the buffer */ final boolean doAdvance() { if (buffer == null) { if (finished) return false; init(); initPartialTraversalState(); nextToConsume = 0; bufferSink.begin(spliterator.getExactSizeIfKnown()); return fillBuffer(); } else { ++nextToConsume; boolean hasNext = nextToConsume < buffer.count(); if (!hasNext) { nextToConsume = 0; buffer.clear(); hasNext = fillBuffer(); } return hasNext; } }
/** * If the buffer is empty, push elements into the sink chain until * the source is empty or cancellation is requested. * @return whether there are elements to consume from the buffer */ private boolean fillBuffer() { while (buffer.count() == 0) { if (bufferSink.cancellationRequested() || !pusher.getAsBoolean()) { if (finished) return false; else { bufferSink.end(); // might trigger more elements finished = true; } } } return true; }
/** * If the buffer is empty, push elements into the sink chain until * the source is empty or cancellation is requested. * @return whether there are elements to consume from the buffer */ private boolean fillBuffer() { while (buffer.count() == 0) { if (bufferSink.cancellationRequested() || !pusher.getAsBoolean()) { if (finished) return false; else { bufferSink.end(); // might trigger more elements finished = true; } } } return true; }
/** * Get an element from the source, pushing it into the sink chain, * setting up the buffer if needed * @return whether there are elements to consume from the buffer */ final boolean doAdvance() { if (buffer == null) { if (finished) return false; init(); initPartialTraversalState(); nextToConsume = 0; bufferSink.begin(spliterator.getExactSizeIfKnown()); return fillBuffer(); } else { ++nextToConsume; boolean hasNext = nextToConsume < buffer.count(); if (!hasNext) { nextToConsume = 0; buffer.clear(); hasNext = fillBuffer(); } return hasNext; } }