126 lines
3.3 KiB
C++
126 lines
3.3 KiB
C++
/*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
#pragma once
|
|
|
|
#include "okapi/api/units/QFrequency.hpp"
|
|
#include "okapi/api/units/QTime.hpp"
|
|
|
|
namespace okapi {
|
|
class AbstractTimer {
|
|
public:
|
|
/**
|
|
* A Timer base class which implements its methods in terms of millis().
|
|
*
|
|
* @param ifirstCalled the current time
|
|
*/
|
|
explicit AbstractTimer(QTime ifirstCalled);
|
|
|
|
virtual ~AbstractTimer();
|
|
|
|
/**
|
|
* Returns the current time in units of QTime.
|
|
*
|
|
* @return the current time
|
|
*/
|
|
virtual QTime millis() const = 0;
|
|
|
|
/**
|
|
* Returns the time passed in ms since the previous call of this function.
|
|
*
|
|
* @return The time passed in ms since the previous call of this function
|
|
*/
|
|
virtual QTime getDt();
|
|
|
|
/**
|
|
* Returns the time passed in ms since the previous call of getDt(). Does not change the time
|
|
* recorded by getDt().
|
|
*
|
|
* @return The time passed in ms since the previous call of getDt()
|
|
*/
|
|
virtual QTime readDt() const;
|
|
|
|
/**
|
|
* Returns the time the timer was first constructed.
|
|
*
|
|
* @return The time the timer was first constructed
|
|
*/
|
|
virtual QTime getStartingTime() const;
|
|
|
|
/**
|
|
* Returns the time since the timer was first constructed.
|
|
*
|
|
* @return The time since the timer was first constructed
|
|
*/
|
|
virtual QTime getDtFromStart() const;
|
|
|
|
/**
|
|
* Place a time marker. Placing another marker will overwrite the previous one.
|
|
*/
|
|
virtual void placeMark();
|
|
|
|
/**
|
|
* Clears the marker.
|
|
*
|
|
* @return The old marker
|
|
*/
|
|
virtual QTime clearMark();
|
|
|
|
/**
|
|
* Place a hard time marker. Placing another hard marker will not overwrite the previous one;
|
|
* instead, call clearHardMark() and then place another.
|
|
*/
|
|
virtual void placeHardMark();
|
|
|
|
/**
|
|
* Clears the hard marker.
|
|
*
|
|
* @return The old hard marker
|
|
*/
|
|
virtual QTime clearHardMark();
|
|
|
|
/**
|
|
* Returns the time since the time marker. Returns 0_ms if there is no marker.
|
|
*
|
|
* @return The time since the time marker
|
|
*/
|
|
virtual QTime getDtFromMark() const;
|
|
|
|
/**
|
|
* Returns the time since the hard time marker. Returns 0_ms if there is no hard marker set.
|
|
*
|
|
* @return The time since the hard time marker
|
|
*/
|
|
virtual QTime getDtFromHardMark() const;
|
|
|
|
/**
|
|
* Returns true when the input time period has passed, then resets. Meant to be used in loops
|
|
* to run an action every time period without blocking.
|
|
*
|
|
* @param time time period
|
|
* @return true when the input time period has passed, false after reading true until the
|
|
* period has passed again
|
|
*/
|
|
virtual bool repeat(QTime time);
|
|
|
|
/**
|
|
* Returns true when the input time period has passed, then resets. Meant to be used in loops
|
|
* to run an action every time period without blocking.
|
|
*
|
|
* @param frequency the repeat frequency
|
|
* @return true when the input time period has passed, false after reading true until the
|
|
* period has passed again
|
|
*/
|
|
virtual bool repeat(QFrequency frequency);
|
|
|
|
protected:
|
|
QTime firstCalled;
|
|
QTime lastCalled;
|
|
QTime mark;
|
|
QTime hardMark;
|
|
QTime repeatMark;
|
|
};
|
|
} // namespace okapi
|