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;
+}

Reply via email to