26
27 import java.util.Comparator;
28 import java.util.Objects;
29 import java.util.Spliterator;
30 import java.util.concurrent.CountedCompleter;
31 import java.util.concurrent.atomic.AtomicBoolean;
32 import java.util.function.Consumer;
33 import java.util.function.DoubleConsumer;
34 import java.util.function.DoublePredicate;
35 import java.util.function.IntConsumer;
36 import java.util.function.IntFunction;
37 import java.util.function.IntPredicate;
38 import java.util.function.LongConsumer;
39 import java.util.function.LongPredicate;
40 import java.util.function.Predicate;
41
42 /**
43 * Factory for instances of a takeWhile and dropWhile operations
44 * that produce subsequences of their input stream.
45 *
46 * @since 1.9
47 */
48 final class WhileOps {
49
50 static final int TAKE_FLAGS = StreamOpFlag.NOT_SIZED | StreamOpFlag.IS_SHORT_CIRCUIT;
51
52 static final int DROP_FLAGS = StreamOpFlag.NOT_SIZED;
53
54 /**
55 * Appends a "takeWhile" operation to the provided Stream.
56 *
57 * @param <T> the type of both input and output elements
58 * @param upstream a reference stream with element type T
59 * @param predicate the predicate that returns false to halt taking.
60 */
61 static <T> Stream<T> makeTakeWhileRef(AbstractPipeline<?, T, ?> upstream,
62 Predicate<? super T> predicate) {
63 Objects.requireNonNull(predicate);
64 return new ReferencePipeline.StatefulOp<T, T>(upstream, StreamShape.REFERENCE, TAKE_FLAGS) {
65 @Override
66 <P_IN> Spliterator<T> opEvaluateParallelLazy(PipelineHelper<T> helper,
|
26
27 import java.util.Comparator;
28 import java.util.Objects;
29 import java.util.Spliterator;
30 import java.util.concurrent.CountedCompleter;
31 import java.util.concurrent.atomic.AtomicBoolean;
32 import java.util.function.Consumer;
33 import java.util.function.DoubleConsumer;
34 import java.util.function.DoublePredicate;
35 import java.util.function.IntConsumer;
36 import java.util.function.IntFunction;
37 import java.util.function.IntPredicate;
38 import java.util.function.LongConsumer;
39 import java.util.function.LongPredicate;
40 import java.util.function.Predicate;
41
42 /**
43 * Factory for instances of a takeWhile and dropWhile operations
44 * that produce subsequences of their input stream.
45 *
46 * @since 9
47 */
48 final class WhileOps {
49
50 static final int TAKE_FLAGS = StreamOpFlag.NOT_SIZED | StreamOpFlag.IS_SHORT_CIRCUIT;
51
52 static final int DROP_FLAGS = StreamOpFlag.NOT_SIZED;
53
54 /**
55 * Appends a "takeWhile" operation to the provided Stream.
56 *
57 * @param <T> the type of both input and output elements
58 * @param upstream a reference stream with element type T
59 * @param predicate the predicate that returns false to halt taking.
60 */
61 static <T> Stream<T> makeTakeWhileRef(AbstractPipeline<?, T, ?> upstream,
62 Predicate<? super T> predicate) {
63 Objects.requireNonNull(predicate);
64 return new ReferencePipeline.StatefulOp<T, T>(upstream, StreamShape.REFERENCE, TAKE_FLAGS) {
65 @Override
66 <P_IN> Spliterator<T> opEvaluateParallelLazy(PipelineHelper<T> helper,
|