steak/include/okapi/api/util/abstractTimer.hpp

126 lines
3.3 KiB
C++
Raw Permalink Normal View History

2024-09-18 13:05:17 -04:00
/*
* 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