< prev index next >
src/java.base/share/classes/java/util/stream/StreamSpliterators.java
Print this page
*** 154,163 ****
--- 154,164 ----
if (finished)
return false;
init();
initPartialTraversalState();
+ initPusher();
nextToConsume = 0;
bufferSink.begin(spliterator.getExactSizeIfKnown());
return fillBuffer();
}
else {
*** 174,198 ****
/**
* Invokes the shape-specific constructor with the provided arguments
* and returns the result.
*/
! abstract AbstractWrappingSpliterator<P_IN, P_OUT, ?> wrap(Spliterator<P_IN> s);
/**
* Initializes buffer, sink chain, and pusher for a shape-specific
* implementation.
*/
abstract void initPartialTraversalState();
@Override
public Spliterator<P_OUT> trySplit() {
if (isParallel && !finished) {
init();
Spliterator<P_IN> split = spliterator.trySplit();
! return (split == null) ? null : wrap(split);
}
else
return null;
}
--- 175,213 ----
/**
* Invokes the shape-specific constructor with the provided arguments
* and returns the result.
*/
! abstract AbstractWrappingSpliterator<P_IN, P_OUT, T_BUFFER> wrap(Spliterator<P_IN> s);
/**
* Initializes buffer, sink chain, and pusher for a shape-specific
* implementation.
*/
abstract void initPartialTraversalState();
+ void initPusher() {
+ pusher = () -> spliterator.tryAdvance(bufferSink);
+ }
+
@Override
public Spliterator<P_OUT> trySplit() {
if (isParallel && !finished) {
init();
Spliterator<P_IN> split = spliterator.trySplit();
! if (split == null)
! return null;
! AbstractWrappingSpliterator<P_IN, P_OUT, T_BUFFER> prefix = wrap(split);
! if (buffer != null) {
! prefix.buffer = buffer;
! prefix.bufferSink = bufferSink;
! prefix.nextToConsume = nextToConsume;
! prefix.initPusher();
! buffer = null;
! }
! return prefix;
}
else
return null;
}
*** 289,299 ****
@Override
void initPartialTraversalState() {
SpinedBuffer<P_OUT> b = new SpinedBuffer<>();
buffer = b;
bufferSink = ph.wrapSink(b::accept);
- pusher = () -> spliterator.tryAdvance(bufferSink);
}
@Override
public boolean tryAdvance(Consumer<? super P_OUT> consumer) {
Objects.requireNonNull(consumer);
--- 304,313 ----
*** 333,352 ****
boolean parallel) {
super(ph, spliterator, parallel);
}
@Override
! AbstractWrappingSpliterator<P_IN, Integer, ?> wrap(Spliterator<P_IN> s) {
return new IntWrappingSpliterator<>(ph, s, isParallel);
}
@Override
void initPartialTraversalState() {
SpinedBuffer.OfInt b = new SpinedBuffer.OfInt();
buffer = b;
bufferSink = ph.wrapSink((Sink.OfInt) b::accept);
- pusher = () -> spliterator.tryAdvance(bufferSink);
}
@Override
public Spliterator.OfInt trySplit() {
return (Spliterator.OfInt) super.trySplit();
--- 347,365 ----
boolean parallel) {
super(ph, spliterator, parallel);
}
@Override
! AbstractWrappingSpliterator<P_IN, Integer, SpinedBuffer.OfInt> wrap(Spliterator<P_IN> s) {
return new IntWrappingSpliterator<>(ph, s, isParallel);
}
@Override
void initPartialTraversalState() {
SpinedBuffer.OfInt b = new SpinedBuffer.OfInt();
buffer = b;
bufferSink = ph.wrapSink((Sink.OfInt) b::accept);
}
@Override
public Spliterator.OfInt trySplit() {
return (Spliterator.OfInt) super.trySplit();
*** 391,410 ****
boolean parallel) {
super(ph, spliterator, parallel);
}
@Override
! AbstractWrappingSpliterator<P_IN, Long, ?> wrap(Spliterator<P_IN> s) {
return new LongWrappingSpliterator<>(ph, s, isParallel);
}
@Override
void initPartialTraversalState() {
SpinedBuffer.OfLong b = new SpinedBuffer.OfLong();
buffer = b;
bufferSink = ph.wrapSink((Sink.OfLong) b::accept);
- pusher = () -> spliterator.tryAdvance(bufferSink);
}
@Override
public Spliterator.OfLong trySplit() {
return (Spliterator.OfLong) super.trySplit();
--- 404,422 ----
boolean parallel) {
super(ph, spliterator, parallel);
}
@Override
! AbstractWrappingSpliterator<P_IN, Long, SpinedBuffer.OfLong> wrap(Spliterator<P_IN> s) {
return new LongWrappingSpliterator<>(ph, s, isParallel);
}
@Override
void initPartialTraversalState() {
SpinedBuffer.OfLong b = new SpinedBuffer.OfLong();
buffer = b;
bufferSink = ph.wrapSink((Sink.OfLong) b::accept);
}
@Override
public Spliterator.OfLong trySplit() {
return (Spliterator.OfLong) super.trySplit();
*** 449,468 ****
boolean parallel) {
super(ph, spliterator, parallel);
}
@Override
! AbstractWrappingSpliterator<P_IN, Double, ?> wrap(Spliterator<P_IN> s) {
return new DoubleWrappingSpliterator<>(ph, s, isParallel);
}
@Override
void initPartialTraversalState() {
SpinedBuffer.OfDouble b = new SpinedBuffer.OfDouble();
buffer = b;
bufferSink = ph.wrapSink((Sink.OfDouble) b::accept);
- pusher = () -> spliterator.tryAdvance(bufferSink);
}
@Override
public Spliterator.OfDouble trySplit() {
return (Spliterator.OfDouble) super.trySplit();
--- 461,479 ----
boolean parallel) {
super(ph, spliterator, parallel);
}
@Override
! AbstractWrappingSpliterator<P_IN, Double, SpinedBuffer.OfDouble> wrap(Spliterator<P_IN> s) {
return new DoubleWrappingSpliterator<>(ph, s, isParallel);
}
@Override
void initPartialTraversalState() {
SpinedBuffer.OfDouble b = new SpinedBuffer.OfDouble();
buffer = b;
bufferSink = ph.wrapSink((Sink.OfDouble) b::accept);
}
@Override
public Spliterator.OfDouble trySplit() {
return (Spliterator.OfDouble) super.trySplit();
< prev index next >