10888a09821a98ac0680fad765217302858e70fa4Paul Duffin/* 20888a09821a98ac0680fad765217302858e70fa4Paul Duffin * This file is a modified version of 30888a09821a98ac0680fad765217302858e70fa4Paul Duffin * http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/main/java/util/concurrent/TimeUnit.java 40888a09821a98ac0680fad765217302858e70fa4Paul Duffin * which contained the following notice: 50888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 60888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Written by Doug Lea with assistance from members of JCP JSR-166 70888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Expert Group and released to the public domain, as explained at 80888a09821a98ac0680fad765217302858e70fa4Paul Duffin * http://creativecommons.org/publicdomain/zero/1.0/ 90888a09821a98ac0680fad765217302858e70fa4Paul Duffin */ 100888a09821a98ac0680fad765217302858e70fa4Paul Duffin 110888a09821a98ac0680fad765217302858e70fa4Paul Duffinpackage java.util.concurrent; 120888a09821a98ac0680fad765217302858e70fa4Paul Duffin 130888a09821a98ac0680fad765217302858e70fa4Paul Duffin/** 140888a09821a98ac0680fad765217302858e70fa4Paul Duffin * GWT emulation of TimeUnit, created by removing unsupported operations from 150888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Doug Lea's public domain version. 160888a09821a98ac0680fad765217302858e70fa4Paul Duffin */ 170888a09821a98ac0680fad765217302858e70fa4Paul Duffinpublic enum TimeUnit { 180888a09821a98ac0680fad765217302858e70fa4Paul Duffin NANOSECONDS { 190888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toNanos(long d) { return d; } 200888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMicros(long d) { return d/(C1/C0); } 210888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMillis(long d) { return d/(C2/C0); } 220888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toSeconds(long d) { return d/(C3/C0); } 230888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMinutes(long d) { return d/(C4/C0); } 240888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toHours(long d) { return d/(C5/C0); } 250888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toDays(long d) { return d/(C6/C0); } 260888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long convert(long d, TimeUnit u) { return u.toNanos(d); } 270888a09821a98ac0680fad765217302858e70fa4Paul Duffin int excessNanos(long d, long m) { return (int)(d - (m*C2)); } 280888a09821a98ac0680fad765217302858e70fa4Paul Duffin }, 290888a09821a98ac0680fad765217302858e70fa4Paul Duffin MICROSECONDS { 300888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toNanos(long d) { return x(d, C1/C0, MAX/(C1/C0)); } 310888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMicros(long d) { return d; } 320888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMillis(long d) { return d/(C2/C1); } 330888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toSeconds(long d) { return d/(C3/C1); } 340888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMinutes(long d) { return d/(C4/C1); } 350888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toHours(long d) { return d/(C5/C1); } 360888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toDays(long d) { return d/(C6/C1); } 370888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long convert(long d, TimeUnit u) { return u.toMicros(d); } 380888a09821a98ac0680fad765217302858e70fa4Paul Duffin int excessNanos(long d, long m) { return (int)((d*C1) - (m*C2)); } 390888a09821a98ac0680fad765217302858e70fa4Paul Duffin }, 400888a09821a98ac0680fad765217302858e70fa4Paul Duffin MILLISECONDS { 410888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toNanos(long d) { return x(d, C2/C0, MAX/(C2/C0)); } 420888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMicros(long d) { return x(d, C2/C1, MAX/(C2/C1)); } 430888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMillis(long d) { return d; } 440888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toSeconds(long d) { return d/(C3/C2); } 450888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMinutes(long d) { return d/(C4/C2); } 460888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toHours(long d) { return d/(C5/C2); } 470888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toDays(long d) { return d/(C6/C2); } 480888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long convert(long d, TimeUnit u) { return u.toMillis(d); } 490888a09821a98ac0680fad765217302858e70fa4Paul Duffin int excessNanos(long d, long m) { return 0; } 500888a09821a98ac0680fad765217302858e70fa4Paul Duffin }, 510888a09821a98ac0680fad765217302858e70fa4Paul Duffin SECONDS { 520888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toNanos(long d) { return x(d, C3/C0, MAX/(C3/C0)); } 530888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMicros(long d) { return x(d, C3/C1, MAX/(C3/C1)); } 540888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMillis(long d) { return x(d, C3/C2, MAX/(C3/C2)); } 550888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toSeconds(long d) { return d; } 560888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMinutes(long d) { return d/(C4/C3); } 570888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toHours(long d) { return d/(C5/C3); } 580888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toDays(long d) { return d/(C6/C3); } 590888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long convert(long d, TimeUnit u) { return u.toSeconds(d); } 600888a09821a98ac0680fad765217302858e70fa4Paul Duffin int excessNanos(long d, long m) { return 0; } 610888a09821a98ac0680fad765217302858e70fa4Paul Duffin }, 620888a09821a98ac0680fad765217302858e70fa4Paul Duffin MINUTES { 630888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toNanos(long d) { return x(d, C4/C0, MAX/(C4/C0)); } 640888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMicros(long d) { return x(d, C4/C1, MAX/(C4/C1)); } 650888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMillis(long d) { return x(d, C4/C2, MAX/(C4/C2)); } 660888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toSeconds(long d) { return x(d, C4/C3, MAX/(C4/C3)); } 670888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMinutes(long d) { return d; } 680888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toHours(long d) { return d/(C5/C4); } 690888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toDays(long d) { return d/(C6/C4); } 700888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long convert(long d, TimeUnit u) { return u.toMinutes(d); } 710888a09821a98ac0680fad765217302858e70fa4Paul Duffin int excessNanos(long d, long m) { return 0; } 720888a09821a98ac0680fad765217302858e70fa4Paul Duffin }, 730888a09821a98ac0680fad765217302858e70fa4Paul Duffin HOURS { 740888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toNanos(long d) { return x(d, C5/C0, MAX/(C5/C0)); } 750888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMicros(long d) { return x(d, C5/C1, MAX/(C5/C1)); } 760888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMillis(long d) { return x(d, C5/C2, MAX/(C5/C2)); } 770888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toSeconds(long d) { return x(d, C5/C3, MAX/(C5/C3)); } 780888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMinutes(long d) { return x(d, C5/C4, MAX/(C5/C4)); } 790888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toHours(long d) { return d; } 800888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toDays(long d) { return d/(C6/C5); } 810888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long convert(long d, TimeUnit u) { return u.toHours(d); } 820888a09821a98ac0680fad765217302858e70fa4Paul Duffin int excessNanos(long d, long m) { return 0; } 830888a09821a98ac0680fad765217302858e70fa4Paul Duffin }, 840888a09821a98ac0680fad765217302858e70fa4Paul Duffin DAYS { 850888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toNanos(long d) { return x(d, C6/C0, MAX/(C6/C0)); } 860888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMicros(long d) { return x(d, C6/C1, MAX/(C6/C1)); } 870888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMillis(long d) { return x(d, C6/C2, MAX/(C6/C2)); } 880888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toSeconds(long d) { return x(d, C6/C3, MAX/(C6/C3)); } 890888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMinutes(long d) { return x(d, C6/C4, MAX/(C6/C4)); } 900888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toHours(long d) { return x(d, C6/C5, MAX/(C6/C5)); } 910888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toDays(long d) { return d; } 920888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long convert(long d, TimeUnit u) { return u.toDays(d); } 930888a09821a98ac0680fad765217302858e70fa4Paul Duffin int excessNanos(long d, long m) { return 0; } 940888a09821a98ac0680fad765217302858e70fa4Paul Duffin }; 950888a09821a98ac0680fad765217302858e70fa4Paul Duffin 960888a09821a98ac0680fad765217302858e70fa4Paul Duffin // Handy constants for conversion methods 970888a09821a98ac0680fad765217302858e70fa4Paul Duffin static final long C0 = 1L; 980888a09821a98ac0680fad765217302858e70fa4Paul Duffin static final long C1 = C0 * 1000L; 990888a09821a98ac0680fad765217302858e70fa4Paul Duffin static final long C2 = C1 * 1000L; 1000888a09821a98ac0680fad765217302858e70fa4Paul Duffin static final long C3 = C2 * 1000L; 1010888a09821a98ac0680fad765217302858e70fa4Paul Duffin static final long C4 = C3 * 60L; 1020888a09821a98ac0680fad765217302858e70fa4Paul Duffin static final long C5 = C4 * 60L; 1030888a09821a98ac0680fad765217302858e70fa4Paul Duffin static final long C6 = C5 * 24L; 1040888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1050888a09821a98ac0680fad765217302858e70fa4Paul Duffin static final long MAX = Long.MAX_VALUE; 1060888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1070888a09821a98ac0680fad765217302858e70fa4Paul Duffin static long x(long d, long m, long over) { 1080888a09821a98ac0680fad765217302858e70fa4Paul Duffin if (d > over) return Long.MAX_VALUE; 1090888a09821a98ac0680fad765217302858e70fa4Paul Duffin if (d < -over) return Long.MIN_VALUE; 1100888a09821a98ac0680fad765217302858e70fa4Paul Duffin return d * m; 1110888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1120888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1130888a09821a98ac0680fad765217302858e70fa4Paul Duffin // exceptions below changed from AbstractMethodError for GWT 1140888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1150888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long convert(long sourceDuration, TimeUnit sourceUnit) { 1160888a09821a98ac0680fad765217302858e70fa4Paul Duffin throw new AssertionError(); 1170888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1180888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1190888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toNanos(long duration) { 1200888a09821a98ac0680fad765217302858e70fa4Paul Duffin throw new AssertionError(); 1210888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1220888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1230888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMicros(long duration) { 1240888a09821a98ac0680fad765217302858e70fa4Paul Duffin throw new AssertionError(); 1250888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1260888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1270888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMillis(long duration) { 1280888a09821a98ac0680fad765217302858e70fa4Paul Duffin throw new AssertionError(); 1290888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1300888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1310888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toSeconds(long duration) { 1320888a09821a98ac0680fad765217302858e70fa4Paul Duffin throw new AssertionError(); 1330888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1340888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1350888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toMinutes(long duration) { 1360888a09821a98ac0680fad765217302858e70fa4Paul Duffin throw new AssertionError(); 1370888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1380888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1390888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toHours(long duration) { 1400888a09821a98ac0680fad765217302858e70fa4Paul Duffin throw new AssertionError(); 1410888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1420888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1430888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long toDays(long duration) { 1440888a09821a98ac0680fad765217302858e70fa4Paul Duffin throw new AssertionError(); 1450888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1460888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1470888a09821a98ac0680fad765217302858e70fa4Paul Duffin abstract int excessNanos(long d, long m); 1480888a09821a98ac0680fad765217302858e70fa4Paul Duffin} 149