Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

TimeUnit.d

Go to the documentation of this file.
00001 
00018 module mango.locks.TimeUnit;
00019 
00044 enum TimeUnit {
00045   NanoSeconds = 0,
00046   MicroSeconds, 
00047   MilliSeconds,
00048   Seconds
00049 }
00050 
00052 private const int[TimeUnit.max+1] multipliers = [ 
00053   1, 
00054   1000, 
00055   1000_000, 
00056   1000_000_000 
00057 ];
00058     
00064 private const long[TimeUnit.max+1] overflows = [ 
00065   0, // unused
00066   long.max / 1000,
00067   long.max / 1000_000,
00068   long.max / 1000_000_000 
00069 ];
00070 
00078 private static long doConvert(int delta, long duration) {
00079   if (delta == 0)
00080     return duration;
00081   if (delta < 0) 
00082     return duration / multipliers[-delta];
00083   if (duration > overflows[delta])
00084     return long.max;
00085   if (duration < -overflows[delta])
00086     return long.min;
00087   return duration * multipliers[delta];
00088 }
00089 
00107 long convert(long duration, TimeUnit fromUnit, TimeUnit toUnit) {
00108   return doConvert(fromUnit - toUnit, duration);
00109 }
00110 
00119 long toNanos(long duration, TimeUnit fromUnit) {
00120   return doConvert(fromUnit, duration);
00121 }
00122 
00131 long toMicros(long duration, TimeUnit fromUnit) {
00132   return doConvert(fromUnit - TimeUnit.MicroSeconds, duration);
00133 }
00134 
00143 long toMillis(long duration, TimeUnit fromUnit) {
00144   return doConvert(fromUnit - TimeUnit.MilliSeconds, duration);
00145 }
00146 
00153 long toSeconds(long duration, TimeUnit fromUnit) {
00154   return doConvert(fromUnit - TimeUnit.Seconds, duration);
00155 }

Generated on Mon Nov 14 10:59:41 2005 for Mango by  doxygen 1.4.0