2006-06-12 Maciej Piechotka [EMAIL PROTECTED]
* java/util/concurrent/TimeUnit.java : Add TimeUnit enum.
diff -ruN java.old/util/concurrent/#TimeUnit.java# java/util/concurrent/#TimeUnit.java#
--- java.old/util/concurrent/#TimeUnit.java# 1970-01-01 01:00:00.000000000 +0100
+++ java/util/concurrent/#TimeUnit.java# 2006-06-12 21:05:26.000000000 +0200
@@ -0,0 +1,80 @@
+package java.util.concurrent;
+
+//TODO: Add doc
+public enum TimeUnit
+{
+ NANOSECONDS(1),
+ MICROSECONDS(1000),
+ MILLISECONDS(1000 * 1000),
+ SECONDS(1000 * 1000 * 1000);
+ public long convert(long duration, TimeUnit unit)
+ {
+ if (unit.nanos > nanos)
+ {
+ final long convertion = unit.nanos / nanos;
+ if (Long.MAX_VALUE / convertion > duration)
+ return Long.MAX_VALUE;
+ else if (Long.MIN_VALUE / convertion < duration)
+ return Long.MIN_VALUE;
+ else
+ return duration * convertion;
+ }
+ else if (unit.nanos < nanos)
+ {
+ return duration * unit.nanos / nanos;
+ }
+ else
+ {
+ return duration;
+ }
+ }
+
+ public long toNanos(long duration)
+ {
+ return convert(duration, NANOSECONDS);
+ }
+
+ public long toMicros(long duration)
+ {
+ return convert(duration, MICROSECONDS);
+ }
+
+ public long toMilis(long duration)
+ {
+ return convert(duration, MILLISECONDS);
+ }
+
+ public long toSeconds(long duration)
+ {
+ return convert(duration, SECONDS);
+ }
+
+ public void timedWait(Object obj, long timeout) throws InterruptedException
+ {
+ long mili = toMilis(timeout);
+ long nano = toNanos(timeout) % MILLISECONDS.nanos;
+ obj.wait(mili, (int) nano);
+ }
+
+ public void timedJoin(Thread thread, long timeout)
+ throws InterruptedException
+ {
+ long mili = toMilis(timeout);
+ long nano = toNanos(timeout) % MILLISECONDS.nanos;
+ thread.join(mili, (int) nano);
+ }
+
+ public void sleep(long timeout) throws InterruptedException
+ {
+ long mili = toMilis(timeout);
+ long nano = toNanos(timeout) % MILLISECONDS.nanos;
+ Thread.sleep(mili, (int) nano);
+ }
+
+ TimeUnit(long nanos)
+ {
+ this.nanos = nanos;
+ }
+
+ private long nanos;
+}
diff -ruN java.old/util/concurrent/TimeUnit.java java/util/concurrent/TimeUnit.java
--- java.old/util/concurrent/TimeUnit.java 1970-01-01 01:00:00.000000000 +0100
+++ java/util/concurrent/TimeUnit.java 2006-06-12 20:40:38.000000000 +0200
@@ -0,0 +1,79 @@
+package java.util.concurrent;
+
+public enum TimeUnit
+{
+ NANOSECONDS(1),
+ MICROSECONDS(1000),
+ MILLISECONDS(1000 * 1000),
+ SECONDS(1000 * 1000 * 1000);
+ public long convert(long duration, TimeUnit unit)
+ {
+ if (unit.nanos > nanos)
+ {
+ final long convertion = unit.nanos / nanos;
+ if (Long.MAX_VALUE / convertion > duration)
+ return Long.MAX_VALUE;
+ else if (Long.MIN_VALUE / convertion < duration)
+ return Long.MIN_VALUE;
+ else
+ return duration * convertion;
+ }
+ else if (unit.nanos < nanos)
+ {
+ return duration * unit.nanos / nanos;
+ }
+ else
+ {
+ return duration;
+ }
+ }
+
+ public long toNanos(long duration)
+ {
+ return convert(duration, NANOSECONDS);
+ }
+
+ public long toMicros(long duration)
+ {
+ return convert(duration, MICROSECONDS);
+ }
+
+ public long toMilis(long duration)
+ {
+ return convert(duration, MILLISECONDS);
+ }
+
+ public long toSeconds(long duration)
+ {
+ return convert(duration, SECONDS);
+ }
+
+ public void timedWait(Object obj, long timeout) throws InterruptedException
+ {
+ long mili = toMilis(timeout);
+ long nano = toNanos(timeout) % MILLISECONDS.nanos;
+ obj.wait(mili, (int) nano);
+ }
+
+ public void timedJoin(Thread thread, long timeout)
+ throws InterruptedException
+ {
+ long mili = toMilis(timeout);
+ long nano = toNanos(timeout) % MILLISECONDS.nanos;
+ thread.join(mili, (int) nano);
+ }
+
+ public void sleep(long timeout) throws InterruptedException
+ {
+ long mili = toMilis(timeout);
+ long nano = toNanos(timeout) % MILLISECONDS.nanos;
+ Thread.sleep(mili, (int) nano);
+ }
+
+ TimeUnit(long nanos)
+ {
+ this.nanos = nanos;
+ }
+
+ private long nanos;
+}