18 #ifndef _DECAF_UTIL_CONCURRENT_TIMEUNIT_H_
19 #define _DECAF_UTIL_CONCURRENT_TIMEUNIT_H_
34 namespace concurrent {
72 static const long long multipliers[];
95 TimeUnit(
int index,
const std::string& name );
116 long long convert(
long long sourceDuration,
const TimeUnit& sourceUnit )
const;
126 long long toNanos(
long long duration )
const {
127 return doConvert( this->index, NANOSECONDS.index, duration );
139 return doConvert( this->index, MICROSECONDS.index, duration );
151 return doConvert( this->index, MILLISECONDS.index, duration );
161 return doConvert( this->index, SECONDS.index, duration );
171 return doConvert( this->index, MINUTES.index, duration );
180 long long toHours(
long long duration )
const {
181 return doConvert( this->index, HOURS.index, duration );
190 long long toDays(
long long duration )
const {
191 return doConvert( this->index, DAYS.index, duration );
244 void sleep(
long long timeout )
const;
250 virtual std::string toString()
const;
266 static const TimeUnit& valueOf(
const std::string& name );
270 virtual int compareTo(
const TimeUnit& value )
const;
272 virtual bool equals(
const TimeUnit& value )
const;
276 virtual bool operator<(
const TimeUnit& value )
const;
281 long long doConvert(
int srcIndex,
int destIndex,
long long duration )
const;
287 int excessNanos(
long long time,
long long ms )
const;
295 static long long scale(
long long duration,
long long multiplier,
long long overflow );