--- jsr166/src/main/java/util/ArrayPrefixHelpers.java 2015/09/19 18:36:55 1.5 +++ jsr166/src/main/java/util/ArrayPrefixHelpers.java 2019/10/10 16:53:08 1.12 @@ -74,12 +74,30 @@ class ArrayPrefixHelpers { static final int MIN_PARTITION = 16; static final class CumulateTask extends CountedCompleter { + @SuppressWarnings("serial") // Not statically typed as Serializable final T[] array; final BinaryOperator function; CumulateTask left, right; - T in, out; + @SuppressWarnings("serial") // Not statically typed as Serializable + T in; + @SuppressWarnings("serial") // Not statically typed as Serializable + T out; final int lo, hi, origin, fence, threshold; + /** Root task constructor */ + public CumulateTask(CumulateTask parent, + BinaryOperator function, + T[] array, int lo, int hi) { + super(parent); + this.function = function; this.array = array; + this.lo = this.origin = lo; this.hi = this.fence = hi; + int p; + this.threshold = + (p = (hi - lo) / (ForkJoinPool.getCommonPoolParallelism() << 3)) + <= MIN_PARTITION ? MIN_PARTITION : p; + } + + /** Subtask constructor */ CumulateTask(CumulateTask parent, BinaryOperator function, T[] array, int origin, int fence, int threshold, int lo, int hi) { @@ -104,7 +122,7 @@ class ArrayPrefixHelpers { int mid = (l + h) >>> 1; f = rt = t.right = new CumulateTask(t, fn, a, org, fnc, th, mid, h); - t = lt = t.left = + t = lt = t.left = new CumulateTask(t, fn, a, org, fnc, th, l, mid); } else { // possibly refork @@ -208,16 +226,32 @@ class ArrayPrefixHelpers { } } } + // OPENJDK @java.io.Serial private static final long serialVersionUID = 5293554502939613543L; } static final class LongCumulateTask extends CountedCompleter { final long[] array; + @SuppressWarnings("serial") // Not statically typed as Serializable final LongBinaryOperator function; LongCumulateTask left, right; long in, out; final int lo, hi, origin, fence, threshold; + /** Root task constructor */ + public LongCumulateTask(LongCumulateTask parent, + LongBinaryOperator function, + long[] array, int lo, int hi) { + super(parent); + this.function = function; this.array = array; + this.lo = this.origin = lo; this.hi = this.fence = hi; + int p; + this.threshold = + (p = (hi - lo) / (ForkJoinPool.getCommonPoolParallelism() << 3)) + <= MIN_PARTITION ? MIN_PARTITION : p; + } + + /** Subtask constructor */ LongCumulateTask(LongCumulateTask parent, LongBinaryOperator function, long[] array, int origin, int fence, int threshold, int lo, int hi) { @@ -242,7 +276,7 @@ class ArrayPrefixHelpers { int mid = (l + h) >>> 1; f = rt = t.right = new LongCumulateTask(t, fn, a, org, fnc, th, mid, h); - t = lt = t.left = + t = lt = t.left = new LongCumulateTask(t, fn, a, org, fnc, th, l, mid); } else { // possibly refork @@ -344,16 +378,32 @@ class ArrayPrefixHelpers { } } } + // OPENJDK @java.io.Serial private static final long serialVersionUID = -5074099945909284273L; } static final class DoubleCumulateTask extends CountedCompleter { final double[] array; + @SuppressWarnings("serial") // Not statically typed as Serializable final DoubleBinaryOperator function; DoubleCumulateTask left, right; double in, out; final int lo, hi, origin, fence, threshold; + /** Root task constructor */ + public DoubleCumulateTask(DoubleCumulateTask parent, + DoubleBinaryOperator function, + double[] array, int lo, int hi) { + super(parent); + this.function = function; this.array = array; + this.lo = this.origin = lo; this.hi = this.fence = hi; + int p; + this.threshold = + (p = (hi - lo) / (ForkJoinPool.getCommonPoolParallelism() << 3)) + <= MIN_PARTITION ? MIN_PARTITION : p; + } + + /** Subtask constructor */ DoubleCumulateTask(DoubleCumulateTask parent, DoubleBinaryOperator function, double[] array, int origin, int fence, int threshold, int lo, int hi) { @@ -378,7 +428,7 @@ class ArrayPrefixHelpers { int mid = (l + h) >>> 1; f = rt = t.right = new DoubleCumulateTask(t, fn, a, org, fnc, th, mid, h); - t = lt = t.left = + t = lt = t.left = new DoubleCumulateTask(t, fn, a, org, fnc, th, l, mid); } else { // possibly refork @@ -480,16 +530,32 @@ class ArrayPrefixHelpers { } } } + // OPENJDK @java.io.Serial private static final long serialVersionUID = -586947823794232033L; } static final class IntCumulateTask extends CountedCompleter { final int[] array; + @SuppressWarnings("serial") // Not statically typed as Serializable final IntBinaryOperator function; IntCumulateTask left, right; int in, out; final int lo, hi, origin, fence, threshold; + /** Root task constructor */ + public IntCumulateTask(IntCumulateTask parent, + IntBinaryOperator function, + int[] array, int lo, int hi) { + super(parent); + this.function = function; this.array = array; + this.lo = this.origin = lo; this.hi = this.fence = hi; + int p; + this.threshold = + (p = (hi - lo) / (ForkJoinPool.getCommonPoolParallelism() << 3)) + <= MIN_PARTITION ? MIN_PARTITION : p; + } + + /** Subtask constructor */ IntCumulateTask(IntCumulateTask parent, IntBinaryOperator function, int[] array, int origin, int fence, int threshold, int lo, int hi) { @@ -514,7 +580,7 @@ class ArrayPrefixHelpers { int mid = (l + h) >>> 1; f = rt = t.right = new IntCumulateTask(t, fn, a, org, fnc, th, mid, h); - t = lt = t.left = + t = lt = t.left = new IntCumulateTask(t, fn, a, org, fnc, th, l, mid); } else { // possibly refork @@ -616,7 +682,7 @@ class ArrayPrefixHelpers { } } } + // OPENJDK @java.io.Serial private static final long serialVersionUID = 3731755594596840961L; } - }