/*
 * Stopwatch.java
 * 
 * Copyright (C) 2013,2014  Pavel Prokhorov (pavelvpster@gmail.com)
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 */
package org.interactiverobotics.common.time;

/**
 * Секундомер.
 * 
 * @author pavelvpster
 * 
 */
public final class Stopwatch {

	/**
	 * Конструктор по умолчанию.
	 * 
	 */
	public Stopwatch() {
		
		// Начинаем сейчас
		
		start();
	}
	

	/**
	 * Отметка времени.
	 * 
	 * Делается при вызове метода start() или restart().
	 * 
	 */
	private long t = 0;


	/**
	 * Этот метод запускает секундомер.
	 * 
	 */
	public void start() {
	
		t = System.currentTimeMillis();
	}

	/**
	 * Этот метод возвращает измеренное время.
	 * 
	 * От момента start() до момента getTime().
	 * 
	 * @return long измеренное время.
	 * 
	 */
	public long getTime() {
		
		final long x = System.currentTimeMillis();
		
		// Возвращаем разницу во времени
		
		return x - t;
	}

	/**
	 * Этот метод перезапускает секундомер.
	 * 
	 * В отличие от метода getTime() этот метод обновляет отметку времени.
	 * 
	 * @return long измеренное время.
	 * 
	 */
	public long restart() {
		
		final long x = System.currentTimeMillis();
		
		// Рассчитываем разницу во времени
		
		final long dt = x - t;

		// Передвигаем отметку времени
		
		t = x;
		
		// Возвращаем разницу во времени
		
		return dt;
	}

}
