2023-10-25 11:36:20 +03:00

69 lines
1.1 KiB
C++

//
// Created by erki on 24/10/23.
//
#pragma once
#include <cstdint>
#include <utility_function.hpp>
#include "cpptick/argstore.hpp"
namespace cpptick
{
struct BaseScheduler;
struct Timer
{
enum Type
{
ONE_SHOT,
PERIODIC
};
Timer(BaseScheduler* scheduler, const std::uint32_t timeout_ms, const Type type)
: scheduler_(scheduler), period_ms(timeout_ms), type(type)
{}
Timer() = delete;
Timer(const Timer&) = delete;
Timer(Timer&&) = delete;
Timer& operator=(const Timer&) = delete;
Timer& operator=(Timer&&) = delete;
void start();
template<typename T>
void setSlot(T& slot)
{
setSlot(&slot.invoke_ptr);
}
void setSlot(Utility::IFunction<void(ArgStorage&)>* slot)
{
slot_ = slot;
}
Utility::IFunction<void(ArgStorage&)>* getSlot()
{
return slot_;
}
std::uint32_t expirationTime(const std::uint32_t current_time) const
{
return period_ms + current_time;
}
std::uint32_t period_ms;
Type type;
private:
BaseScheduler* scheduler_;
Utility::IFunction<void(ArgStorage&)>* slot_ = nullptr;
};
}// namespace cpptick