/* Estimate the elapsed time
* TODO: Reduce if-else construct
* overheads in elapsed time
* calculations, add more precision
*/
public class Clock {
private long start, elapsed, lap;
public enum Resolution{
MILLISEC, SEC, MINUTE, HOUR, DAY
}
public Clock(){
start = -1;
elapsed = 0;
}
public void startTimer(){
start = System.currentTimeMillis();
lap = start;
}
/* return elapsed milliseconds */
public long getTotalElapsedTime(){
/* start timer before using */
if(start == -1){
Logger.log(Logger.Status.ERR_CLOCK);
return -1;
}
elapsed = System.currentTimeMillis() - start;
return elapsed;
}
/* get elapsed time from start of clock (in different resolutions) */
public long getTotalElapsedTime(Resolution reso){
/* start timer before using */
if(start == -1){
Logger.log(Logger.Status.ERR_CLOCK);
return -1;
}
elapsed = System.currentTimeMillis() - start;
if(reso == Resolution.MILLISEC)
return elapsed;
long elapsedReso = elapsed/1000;
if(reso == Resolution.SEC)
return elapsedReso;
elapsedReso /= 60;
if(reso == Resolution.MINUTE)
return elapsedReso;
elapsedReso /= 60;
if(reso == Resolution.HOUR)
return elapsedReso;
elapsedReso /= 24;
return elapsedReso;
}
/* get elapsed time from last lap */
public long getLapElapsedTime(){
/* start timer before using */
if(start == -1){
Logger.log(Logger.Status.ERR_CLOCK);
return -1;
}
long elapsedLap = System.currentTimeMillis() - lap;
/* update current lap */
lap = System.currentTimeMillis();
return elapsedLap;
}
public long getLapElapsedTime(Resolution reso){
/* start timer before using */
if(start == -1){
Logger.log(Logger.Status.ERR_CLOCK);
return -1;
}
long elapsedLap = System.currentTimeMillis() - lap;
if(reso == Resolution.SEC)
elapsedLap /= 1000;
else if(reso == Resolution.MINUTE)
elapsedLap /= 60;
else if(reso == Resolution.HOUR)
elapsedLap /= 60;
else if(reso == Resolution.DAY)
elapsedLap /= 24;
/* update current lap */
lap = System.currentTimeMillis();
return elapsedLap;
}
public void resetTimer(){
start = System.currentTimeMillis();
elapsed = 0;
}
}