changeset 8244:8657066e8307

Move MAX_ARRAY_SIZE from Streams to Nodes to reduce pressure on putback dependencies
author briangoetz
date Wed, 17 Apr 2013 16:36:23 -0400
parents 76ac19e61df1
children 5544bf8a3d4b
files src/share/classes/java/util/stream/Nodes.java src/share/classes/java/util/stream/SortedOps.java src/share/classes/java/util/stream/Streams.java
diffstat 3 files changed, 26 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/java/util/stream/Nodes.java	Wed Apr 17 14:41:09 2013 -0400
+++ b/src/share/classes/java/util/stream/Nodes.java	Wed Apr 17 16:36:23 2013 -0400
@@ -55,6 +55,11 @@
         throw new Error("no instances");
     }
 
+    /**
+     * The maximum size of an array that can be allocated.
+     */
+    static final long MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
+
     private static final Node EMPTY_NODE = new EmptyNode.OfRef();
     private static final Node.OfInt EMPTY_INT_NODE = new EmptyNode.OfInt();
     private static final Node.OfLong EMPTY_LONG_NODE = new EmptyNode.OfLong();
@@ -258,7 +263,7 @@
      * @return a {@code Node.Builder}
      */
     static <T> Node.Builder<T> builder(long exactSizeIfKnown, IntFunction<T[]> generator) {
-        return (exactSizeIfKnown >= 0 && exactSizeIfKnown < Streams.MAX_ARRAY_SIZE)
+        return (exactSizeIfKnown >= 0 && exactSizeIfKnown < MAX_ARRAY_SIZE)
                ? new FixedNodeBuilder<>(exactSizeIfKnown, generator)
                : builder();
     }
@@ -296,7 +301,7 @@
      * @return a {@code Node.Builder.OfInt}
      */
     static Node.Builder.OfInt intBuilder(long exactSizeIfKnown) {
-        return (exactSizeIfKnown >= 0 && exactSizeIfKnown < Streams.MAX_ARRAY_SIZE)
+        return (exactSizeIfKnown >= 0 && exactSizeIfKnown < MAX_ARRAY_SIZE)
                ? new IntFixedNodeBuilder(exactSizeIfKnown)
                : intBuilder();
     }
@@ -333,7 +338,7 @@
      * @return a {@code Node.Builder.OfLong}
      */
     static Node.Builder.OfLong longBuilder(long exactSizeIfKnown) {
-        return (exactSizeIfKnown >= 0 && exactSizeIfKnown < Streams.MAX_ARRAY_SIZE)
+        return (exactSizeIfKnown >= 0 && exactSizeIfKnown < MAX_ARRAY_SIZE)
                ? new LongFixedNodeBuilder(exactSizeIfKnown)
                : longBuilder();
     }
@@ -370,7 +375,7 @@
      * @return a {@code Node.Builder.OfDouble}
      */
     static Node.Builder.OfDouble doubleBuilder(long exactSizeIfKnown) {
-        return (exactSizeIfKnown >= 0 && exactSizeIfKnown < Streams.MAX_ARRAY_SIZE)
+        return (exactSizeIfKnown >= 0 && exactSizeIfKnown < MAX_ARRAY_SIZE)
                ? new DoubleFixedNodeBuilder(exactSizeIfKnown)
                : doubleBuilder();
     }
@@ -413,7 +418,7 @@
                                                     IntFunction<P_OUT[]> generator) {
         long size = helper.exactOutputSizeIfKnown(spliterator);
         if (size >= 0 && spliterator.hasCharacteristics(Spliterator.SUBSIZED)) {
-            if (size >= Streams.MAX_ARRAY_SIZE)
+            if (size >= MAX_ARRAY_SIZE)
                 throw new IllegalArgumentException("Stream size exceeds max array size");
             P_OUT[] array = generator.apply((int) size);
             new SizedCollectorTask.OfRef<>(spliterator, helper, array).invoke();
@@ -449,7 +454,7 @@
                                                boolean flattenTree) {
         long size = helper.exactOutputSizeIfKnown(spliterator);
         if (size >= 0 && spliterator.hasCharacteristics(Spliterator.SUBSIZED)) {
-            if (size >= Streams.MAX_ARRAY_SIZE)
+            if (size >= MAX_ARRAY_SIZE)
                 throw new IllegalArgumentException("Stream size exceeds max array size");
             int[] array = new int[(int) size];
             new SizedCollectorTask.OfInt<>(spliterator, helper, array).invoke();
@@ -486,7 +491,7 @@
                                                  boolean flattenTree) {
         long size = helper.exactOutputSizeIfKnown(spliterator);
         if (size >= 0 && spliterator.hasCharacteristics(Spliterator.SUBSIZED)) {
-            if (size >= Streams.MAX_ARRAY_SIZE)
+            if (size >= MAX_ARRAY_SIZE)
                 throw new IllegalArgumentException("Stream size exceeds max array size");
             long[] array = new long[(int) size];
             new SizedCollectorTask.OfLong<>(spliterator, helper, array).invoke();
@@ -523,7 +528,7 @@
                                                      boolean flattenTree) {
         long size = helper.exactOutputSizeIfKnown(spliterator);
         if (size >= 0 && spliterator.hasCharacteristics(Spliterator.SUBSIZED)) {
-            if (size >= Streams.MAX_ARRAY_SIZE)
+            if (size >= MAX_ARRAY_SIZE)
                 throw new IllegalArgumentException("Stream size exceeds max array size");
             double[] array = new double[(int) size];
             new SizedCollectorTask.OfDouble<>(spliterator, helper, array).invoke();
@@ -720,7 +725,7 @@
 
         @SuppressWarnings("unchecked")
         ArrayNode(long size, IntFunction<T[]> generator) {
-            if (size >= Streams.MAX_ARRAY_SIZE)
+            if (size >= MAX_ARRAY_SIZE)
                 throw new IllegalArgumentException("Stream size exceeds max array size");
             this.array = generator.apply((int) size);
             this.curSize = 0;
@@ -1212,7 +1217,7 @@
 
         FixedNodeBuilder(long size, IntFunction<T[]> generator) {
             super(size, generator);
-            assert size < Streams.MAX_ARRAY_SIZE;
+            assert size < MAX_ARRAY_SIZE;
         }
 
         @Override
@@ -1372,7 +1377,7 @@
         int curSize;
 
         IntArrayNode(long size) {
-            if (size >= Streams.MAX_ARRAY_SIZE)
+            if (size >= MAX_ARRAY_SIZE)
                 throw new IllegalArgumentException("Stream size exceeds max array size");
             this.array = new int[(int) size];
             this.curSize = 0;
@@ -1428,7 +1433,7 @@
         int curSize;
 
         LongArrayNode(long size) {
-            if (size >= Streams.MAX_ARRAY_SIZE)
+            if (size >= MAX_ARRAY_SIZE)
                 throw new IllegalArgumentException("Stream size exceeds max array size");
             this.array = new long[(int) size];
             this.curSize = 0;
@@ -1482,7 +1487,7 @@
         int curSize;
 
         DoubleArrayNode(long size) {
-            if (size >= Streams.MAX_ARRAY_SIZE)
+            if (size >= MAX_ARRAY_SIZE)
                 throw new IllegalArgumentException("Stream size exceeds max array size");
             this.array = new double[(int) size];
             this.curSize = 0;
@@ -1636,7 +1641,7 @@
 
         IntFixedNodeBuilder(long size) {
             super(size);
-            assert size < Streams.MAX_ARRAY_SIZE;
+            assert size < MAX_ARRAY_SIZE;
         }
 
         @Override
@@ -1690,7 +1695,7 @@
 
         LongFixedNodeBuilder(long size) {
             super(size);
-            assert size < Streams.MAX_ARRAY_SIZE;
+            assert size < MAX_ARRAY_SIZE;
         }
 
         @Override
@@ -1744,7 +1749,7 @@
 
         DoubleFixedNodeBuilder(long size) {
             super(size);
-            assert size < Streams.MAX_ARRAY_SIZE;
+            assert size < MAX_ARRAY_SIZE;
         }
 
         @Override
@@ -2019,7 +2024,7 @@
                 Spliterator<P_IN> leftSplit;
                 if (!AbstractTask.suggestSplit(task.spliterator, task.targetSize)
                     || ((leftSplit = task.spliterator.trySplit()) == null)) {
-                    if (task.offset + task.length >= Streams.MAX_ARRAY_SIZE)
+                    if (task.offset + task.length >= MAX_ARRAY_SIZE)
                         throw new IllegalArgumentException("Stream size exceeds max array size");
                     T_SINK sink = (T_SINK) task;
                     task.helper.wrapAndCopyInto(sink, task.spliterator);
--- a/src/share/classes/java/util/stream/SortedOps.java	Wed Apr 17 14:41:09 2013 -0400
+++ b/src/share/classes/java/util/stream/SortedOps.java	Wed Apr 17 16:36:23 2013 -0400
@@ -281,7 +281,7 @@
 
         @Override
         public void begin(long size) {
-            if (size >= Streams.MAX_ARRAY_SIZE)
+            if (size >= Nodes.MAX_ARRAY_SIZE)
                 throw new IllegalArgumentException("Stream size exceeds max array size");
             array = (T[]) new Object[(int) size];
         }
@@ -347,7 +347,7 @@
 
         @Override
         public void begin(long size) {
-            if (size >= Streams.MAX_ARRAY_SIZE)
+            if (size >= Nodes.MAX_ARRAY_SIZE)
                 throw new IllegalArgumentException("Stream size exceeds max array size");
             array = new int[(int) size];
         }
@@ -408,7 +408,7 @@
 
         @Override
         public void begin(long size) {
-            if (size >= Streams.MAX_ARRAY_SIZE)
+            if (size >= Nodes.MAX_ARRAY_SIZE)
                 throw new IllegalArgumentException("Stream size exceeds max array size");
             array = new long[(int) size];
         }
@@ -469,7 +469,7 @@
 
         @Override
         public void begin(long size) {
-            if (size >= Streams.MAX_ARRAY_SIZE)
+            if (size >= Nodes.MAX_ARRAY_SIZE)
                 throw new IllegalArgumentException("Stream size exceeds max array size");
             array = new double[(int) size];
         }
--- a/src/share/classes/java/util/stream/Streams.java	Wed Apr 17 14:41:09 2013 -0400
+++ b/src/share/classes/java/util/stream/Streams.java	Wed Apr 17 16:36:23 2013 -0400
@@ -67,11 +67,6 @@
      */
     private static final Object NONE = new Object();
 
-    /**
-     * The maximum size of an array that can be allocated.
-     */
-    static final long MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
-
     // Stream construction
 
     /**