--- jsr166/src/extra166y/PAS.java 2009/01/06 14:30:57 1.1 +++ jsr166/src/extra166y/PAS.java 2009/11/22 19:08:44 1.6 @@ -1524,7 +1524,7 @@ class PAS { continue; double x = src[k]; long bits = Double.doubleToLongBits(x); - int hash = hash((int)(bits ^ (bits >>> 32)));; + int hash = hash((int)(bits ^ (bits >>> 32))); long entry = (((long)hash) << 32) + (k + 1); int idx = hash & mask; for (;;) { @@ -1875,11 +1875,13 @@ class PAS { final RecursiveAction right; final RecursiveAction merger; FJSubSorter(RecursiveAction left, RecursiveAction right, - RecursiveAction merger){ + RecursiveAction merger) { this.left = left; this.right = right; this.merger = merger; } public void compute() { - invokeAll(left, right); + right.fork(); + left.invoke(); + right.join(); merger.invoke(); } } @@ -2346,8 +2348,14 @@ class PAS { else break; } - oquickSort(a, cmp, lo, left); - lo = left + 1; + if (left - lo <= hi - right) { + oquickSort(a, cmp, lo, left); + lo = left + 1; + } + else { + oquickSort(a, cmp, right, hi); + hi = left; + } } } @@ -2392,8 +2400,14 @@ class PAS { else break; } - ocquickSort(a, lo, left); - lo = left + 1; + if (left - lo <= hi - right) { + ocquickSort(a, lo, left); + lo = left + 1; + } + else { + ocquickSort(a, right, hi); + hi = left; + } } } @@ -2438,8 +2452,14 @@ class PAS { else break; } - dquickSort(a, cmp, lo, left); - lo = left + 1; + if (left - lo <= hi - right) { + dquickSort(a, cmp, lo, left); + lo = left + 1; + } + else { + dquickSort(a, cmp, right, hi); + hi = left; + } } } @@ -2484,8 +2504,14 @@ class PAS { else break; } - dcquickSort(a, lo, left); - lo = left + 1; + if (left - lo <= hi - right) { + dcquickSort(a, lo, left); + lo = left + 1; + } + else { + dcquickSort(a, right, hi); + hi = left; + } } } @@ -2530,8 +2556,14 @@ class PAS { else break; } - lquickSort(a, cmp, lo, left); - lo = left + 1; + if (left - lo <= hi - right) { + lquickSort(a, cmp, lo, left); + lo = left + 1; + } + else { + lquickSort(a, cmp, right, hi); + hi = left; + } } } @@ -2576,8 +2608,14 @@ class PAS { else break; } - lcquickSort(a, lo, left); - lo = left + 1; + if (left - lo <= hi - right) { + lcquickSort(a, lo, left); + lo = left + 1; + } + else { + lcquickSort(a, right, hi); + hi = left; + } } } @@ -2671,7 +2709,7 @@ class PAS { int cb; for (;;) { // Establish action: sum, cumulate, or both int b = phase; - if ((b & FINISHED) != 0) // already done + if ((b & FINISHED) != 0) // already done return false; if ((b & CUMULATE) != 0) cb = FINISHED; @@ -2783,7 +2821,7 @@ class PAS { } /** - * Computational operations for FJSCan + * Computational operations for FJScan */ static abstract class FJScanOp { final int threshold;