jdk/src/java.base/share/classes/java/util/stream/Nodes.java
changeset 32649 2ee9017c7597
parent 31644 dbca10d053fd
equal deleted inserted replaced
32648:1fa861caf840 32649:2ee9017c7597
   560         }
   560         }
   561     }
   561     }
   562 
   562 
   563     // Implementations
   563     // Implementations
   564 
   564 
   565     private static abstract class EmptyNode<T, T_ARR, T_CONS> implements Node<T> {
   565     private abstract static class EmptyNode<T, T_ARR, T_CONS> implements Node<T> {
   566         EmptyNode() { }
   566         EmptyNode() { }
   567 
   567 
   568         @Override
   568         @Override
   569         public T[] asArray(IntFunction<T[]> generator) {
   569         public T[] asArray(IntFunction<T[]> generator) {
   570             return generator.apply(0);
   570             return generator.apply(0);
   748     }
   748     }
   749 
   749 
   750     /**
   750     /**
   751      * Node class for an internal node with two or more children
   751      * Node class for an internal node with two or more children
   752      */
   752      */
   753     private static abstract class AbstractConcNode<T, T_NODE extends Node<T>> implements Node<T> {
   753     private abstract static class AbstractConcNode<T, T_NODE extends Node<T>> implements Node<T> {
   754         protected final T_NODE left;
   754         protected final T_NODE left;
   755         protected final T_NODE right;
   755         protected final T_NODE right;
   756         private final long size;
   756         private final long size;
   757 
   757 
   758         AbstractConcNode(T_NODE left, T_NODE right) {
   758         AbstractConcNode(T_NODE left, T_NODE right) {
   930             }
   930             }
   931         }
   931         }
   932     }
   932     }
   933 
   933 
   934     /** Abstract class for spliterator for all internal node classes */
   934     /** Abstract class for spliterator for all internal node classes */
   935     private static abstract class InternalNodeSpliterator<T,
   935     private abstract static class InternalNodeSpliterator<T,
   936                                                           S extends Spliterator<T>,
   936                                                           S extends Spliterator<T>,
   937                                                           N extends Node<T>>
   937                                                           N extends Node<T>>
   938             implements Spliterator<T> {
   938             implements Spliterator<T> {
   939         // Node we are pointing to
   939         // Node we are pointing to
   940         // null if full traversal has occurred
   940         // null if full traversal has occurred
  1112                 else
  1112                 else
  1113                     while(tryAdvance(consumer)) { }
  1113                     while(tryAdvance(consumer)) { }
  1114             }
  1114             }
  1115         }
  1115         }
  1116 
  1116 
  1117         private static abstract class OfPrimitive<T, T_CONS, T_ARR,
  1117         private abstract static class OfPrimitive<T, T_CONS, T_ARR,
  1118                                                   T_SPLITR extends Spliterator.OfPrimitive<T, T_CONS, T_SPLITR>,
  1118                                                   T_SPLITR extends Spliterator.OfPrimitive<T, T_CONS, T_SPLITR>,
  1119                                                   N extends Node.OfPrimitive<T, T_CONS, T_ARR, T_SPLITR, N>>
  1119                                                   N extends Node.OfPrimitive<T, T_CONS, T_ARR, T_SPLITR, N>>
  1120                 extends InternalNodeSpliterator<T, T_SPLITR, N>
  1120                 extends InternalNodeSpliterator<T, T_SPLITR, N>
  1121                 implements Spliterator.OfPrimitive<T, T_CONS, T_SPLITR> {
  1121                 implements Spliterator.OfPrimitive<T, T_CONS, T_SPLITR> {
  1122 
  1122 
  1825 
  1825 
  1826     /*
  1826     /*
  1827      * This and subclasses are not intended to be serializable
  1827      * This and subclasses are not intended to be serializable
  1828      */
  1828      */
  1829     @SuppressWarnings("serial")
  1829     @SuppressWarnings("serial")
  1830     private static abstract class SizedCollectorTask<P_IN, P_OUT, T_SINK extends Sink<P_OUT>,
  1830     private abstract static class SizedCollectorTask<P_IN, P_OUT, T_SINK extends Sink<P_OUT>,
  1831                                                      K extends SizedCollectorTask<P_IN, P_OUT, T_SINK, K>>
  1831                                                      K extends SizedCollectorTask<P_IN, P_OUT, T_SINK, K>>
  1832             extends CountedCompleter<Void>
  1832             extends CountedCompleter<Void>
  1833             implements Sink<P_OUT> {
  1833             implements Sink<P_OUT> {
  1834         protected final Spliterator<P_IN> spliterator;
  1834         protected final Spliterator<P_IN> spliterator;
  1835         protected final PipelineHelper<P_OUT> helper;
  1835         protected final PipelineHelper<P_OUT> helper;
  2028             }
  2028             }
  2029         }
  2029         }
  2030     }
  2030     }
  2031 
  2031 
  2032     @SuppressWarnings("serial")
  2032     @SuppressWarnings("serial")
  2033     private static abstract class ToArrayTask<T, T_NODE extends Node<T>,
  2033     private abstract static class ToArrayTask<T, T_NODE extends Node<T>,
  2034                                               K extends ToArrayTask<T, T_NODE, K>>
  2034                                               K extends ToArrayTask<T, T_NODE, K>>
  2035             extends CountedCompleter<Void> {
  2035             extends CountedCompleter<Void> {
  2036         protected final T_NODE node;
  2036         protected final T_NODE node;
  2037         protected final int offset;
  2037         protected final int offset;
  2038 
  2038