< 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 >