package arkref.ext.fig.basic;
/**
* Simple class for measuring elapsed time.
*/
public class StopWatch
{
public StopWatch()
{
}
public StopWatch(long ms)
{
startTime = 0;
endTime = ms;
this.ms = ms;
}
public void reset()
{
ms = 0;
isRunning = false;
}
public StopWatch start()
{
assert !isRunning;
isRunning = true;
startTime = System.currentTimeMillis();
return this;
}
public StopWatch stop()
{
assert isRunning;
endTime = System.currentTimeMillis();
isRunning = false;
ms = endTime - startTime;
n = 1;
return this;
}
public StopWatch accumStop()
{
// Stop and accumulate time
assert isRunning;
endTime = System.currentTimeMillis();
isRunning = false;
ms += endTime - startTime;
n++;
return this;
}
public void add(StopWatch w) {
assert !isRunning && !w.isRunning;
ms += w.ms;
n += w.n;
}
public long getCurrTimeLong()
{
return ms + (isRunning() ? System.currentTimeMillis() - startTime : 0);
}
@Override
public String toString()
{
long msCopy = ms;
long m = msCopy / 60000;
msCopy %= 60000;
long h = m / 60;
m %= 60;
long d = h / 24;
h %= 24;
long y = d / 365;
d %= 365;
long s = msCopy / 1000;
StringBuilder sb = new StringBuilder();
if (y > 0)
{
sb.append(y);
sb.append('y');
sb.append(d);
sb.append('d');
}
if (d > 0)
{
sb.append(d);
sb.append('d');
sb.append(h);
sb.append('h');
}
else if (h > 0)
{
sb.append(h);
sb.append('h');
sb.append(m);
sb.append('m');
}
else if (m > 0)
{
sb.append(m);
sb.append('m');
sb.append(s);
sb.append('s');
}
else if (s > 9)
{
sb.append(s);
sb.append('s');
}
else if (s > 0)
{
sb.append((ms / 100) / 10.0);
sb.append('s');
}
else
{
sb.append(ms / 1000.0);
sb.append('s');
}
return sb.toString();
}
public long startTime, endTime, ms;
public int n;
private boolean isRunning = false;
public boolean isRunning()
{
return isRunning;
}
// Use StopWatchSet instead
@Deprecated
public static void start(String s)
{
}
@Deprecated
public static void accumStop(String s)
{
}
}