Program Listing for File conditional_timer.hpp
↰ Return to documentation for file (src/tap/architecture/conditional_timer.hpp
)
/*
* Copyright (c) 2020-2021 Advanced Robotics at the University of Washington <robomstr@uw.edu>
*
* This file is part of Taproot.
*
* Taproot 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.
*
* Taproot 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 Taproot. If not, see <https://www.gnu.org/licenses/>.
*/
#ifndef TAPROOT_CONDITIONAL_TIMER_HPP_
#define TAPROOT_CONDITIONAL_TIMER_HPP_
#include <cstdint>
#include "timeout.hpp"
namespace tap
{
namespace arch
{
template <class Timeout>
class ConditionalTimer
{
public:
explicit ConditionalTimer(uint32_t timeout) : timeout(timeout) {}
inline void restart() { timer.restart(timeout); }
inline void restart(uint32_t newTimeout)
{
timeout = newTimeout;
timer.restart(newTimeout);
}
inline void stop() { timer.stop(); }
inline bool execute(bool condition)
{
if (!condition)
{
timer.restart(timeout);
}
return timer.isExpired();
}
inline bool isStopped() { return timer.isStopped(); }
private:
Timeout timer;
uint32_t timeout;
};
using ConditionalMilliTimer = ConditionalTimer<MilliTimeout>;
} // namespace arch
} // namespace tap
#endif