ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/CCBoxedLongSort.java
(Generate patch)

Comparing jsr166/src/test/loops/CCBoxedLongSort.java (file contents):
Revision 1.1 by dl, Mon Apr 9 13:18:06 2012 UTC vs.
Revision 1.4 by jsr166, Wed Dec 31 17:00:58 2014 UTC

# Line 4 | Line 4
4   * http://creativecommons.org/publicdomain/zero/1.0/
5   */
6  
7 import java.util.concurrent.*;
7   import java.util.*;
8 + import java.util.concurrent.*;
9  
10   class CCBoxedLongSort {
11      static final long NPS = (1000L * 1000 * 1000);
# Line 68 | Line 68 | class CCBoxedLongSort {
68              long now = System.nanoTime();
69              double total = (double)(now - start) / NPS;
70              double elapsed = (double)(now - last) / NPS;
71 <            System.out.printf("Arrays.sort   time:  %7.3f total %9.3f\n",
71 >            System.out.printf("Arrays.sort   time:  %7.3f total %9.3f\n",
72                                elapsed, total);
73              pool.invoke(new OrderChecker(null, a, 0, n, n));
74          }
# Line 86 | Line 86 | class CCBoxedLongSort {
86              long now = System.nanoTime();
87              double total = (double)(now - start) / NPS;
88              double elapsed = (double)(now - last) / NPS;
89 <            System.out.printf("Parallel sort time:  %7.3f total %9.3f\n",
89 >            System.out.printf("Parallel sort time:  %7.3f total %9.3f\n",
90                                elapsed, total);
91              pool.invoke(new OrderChecker(null, a, 0, n, n));
92          }
# Line 100 | Line 100 | class CCBoxedLongSort {
100       * merges and re-merges. These don't need to keep track of the
101       * arrays, and are never themselves forked, so are mostly empty.
102       */
103 <    static final class Subsorter extends CountedCompleter {
104 <        Subsorter(CountedCompleter p) { super(p); }
103 >    static final class Subsorter extends CountedCompleter<Void> {
104 >        Subsorter(CountedCompleter<?> p) { super(p); }
105          public final void compute() { }
106      }
107  
108 <    static final class Comerger extends CountedCompleter {
108 >    static final class Comerger extends CountedCompleter<Void> {
109          final Merger merger;
110          Comerger(Merger merger) {
111              super(null, 1);
112              this.merger = merger;
113          }
114          public final void compute() { }
115 <        public final void onCompletion(CountedCompleter t) {
115 >        public final void onCompletion(CountedCompleter<?> t) {
116              merger.compute();
117          }
118      }
119  
120 <    static final class Sorter extends CountedCompleter {
120 >    static final class Sorter extends CountedCompleter<Void> {
121          final Long[] a;
122          final Long[] w;
123          final int origin;
124          final int size;
125 <        Sorter(CountedCompleter par, Long[] a, Long[] w, int origin, int n) {
125 >        Sorter(CountedCompleter<?> par, Long[] a, Long[] w, int origin, int n) {
126              super(par);
127              this.a = a; this.w = w; this.origin = origin; this.size = n;
128          }
# Line 132 | Line 132 | class CCBoxedLongSort {
132              Long[] w = this.w;
133              int l = this.origin;
134              int n = this.size;
135 <            CountedCompleter s = this;
135 >            CountedCompleter<?> s = this;
136              int thr = THRESHOLD;
137              while (n > thr) {
138                  int h = n >>> 1;
# Line 140 | Line 140 | class CCBoxedLongSort {
140                  int u = h + q;
141                  int lq = l + q, lh = l + h, lu = l + u;
142                  int nh = n - h, nu = n - u, hq = h - q;
143 <                Comerger fc =
143 >                Comerger fc =
144                      new Comerger(new Merger(s, w, a, l, h, lh, nh, l));
145 <                Comerger rc =
145 >                Comerger rc =
146                      new Comerger(new Merger(fc, a, w, lh, q, lu, nu, lh));
147 <                Comerger lc =
147 >                Comerger lc =
148                      new Comerger(new Merger(fc, a, w, l, q, lq, hq, l));
149                  Sorter su = new Sorter(rc, a, w, lu, nu);
150                  Sorter sh = new Sorter(rc, a, w, lh, q);
# Line 157 | Line 157 | class CCBoxedLongSort {
157              }
158              //            Arrays.sort(a, l, l+n);
159              quickSort(a, l, l+n-1);
160 <            s.tryComplete();
160 >            s.tryComplete();
161          }
162      }
163  
164 <    static final class Merger extends CountedCompleter {
164 >    static final class Merger extends CountedCompleter<Void> {
165          final Long[] a; final Long[] w;
166          final int lo; final int ln; final int ro; final int rn; final int wo;
167 <        Merger(CountedCompleter par,
167 >        Merger(CountedCompleter<?> par,
168                 Long[] a, Long[] w, int lo, int ln, int ro, int rn, int wo) {
169              super(par);
170              this.a = a;    this.w = w;
# Line 205 | Line 205 | class CCBoxedLongSort {
205                  rn = rh;
206                  ln = lh;
207              }
208 <            
208 >
209              int lFence = l + ln;
210              int rFence = r + rn;
211              for (Long t;;) {
# Line 213 | Line 213 | class CCBoxedLongSort {
213                      Long al = a[l], ar;
214                      if (r >= rFence ||
215                          al.longValue() <= (ar = a[r]).longValue()) {
216 <                        ++l; t = al;
217 <                    }
218 <                    else {
219 <                        ++r; t = ar;
216 >                        ++l; t = al;
217 >                    }
218 >                    else {
219 >                        ++r; t = ar;
220                      }
221                  }
222                  else if (r < rFence)
223                      t = a[r++];
224 <                else
224 >                else
225                      break;
226                  w[k++] = t;
227              }
# Line 239 | Line 239 | class CCBoxedLongSort {
239          }
240      }
241  
242 <    static final class RandomRepacker extends CountedCompleter {
242 >    static final class RandomRepacker extends CountedCompleter<Void> {
243          final Long[] src;
244          final Long[] dst;
245          final int lo, hi, size;
246 <        RandomRepacker(CountedCompleter par, Long[] src, Long[] dst,
246 >        RandomRepacker(CountedCompleter<?> par, Long[] src, Long[] dst,
247                         int lo, int hi, int size) {
248              super(par);
249              this.src = src; this.dst = dst;
250              this.lo = lo; this.hi = hi; this.size = size;
251          }
252 <        
252 >
253          public final void compute() {
254              Long[] s = src;
255              Long[] d = dst;
# Line 267 | Line 267 | class CCBoxedLongSort {
267          }
268      }
269  
270 <    static final class OrderChecker extends CountedCompleter {
270 >    static final class OrderChecker extends CountedCompleter<Void> {
271          final Long[] array;
272          final int lo, hi, size;
273 <        OrderChecker(CountedCompleter par, Long[] a, int lo, int hi, int size) {
273 >        OrderChecker(CountedCompleter<?> par, Long[] a, int lo, int hi, int size) {
274              super(par);
275 <            this.array = a;
275 >            this.array = a;
276              this.lo = lo; this.hi = hi; this.size = size;
277          }
278  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines