This repository has been archived on 2024-01-25. You can view files and clone it, but cannot push or open issues or pull requests.

66 lines
2.0 KiB
C++
Raw Normal View History

2023-09-19 15:59:49 +02:00
#include <config/xf-config.h>
#if (USE_XF_COMMON_TIMEOUTMANAGER_CLASS != 0)
#include <cassert>
#include "xf/interface/behavior.h"
#include "xf/interface/mutex.h"
#include "timeoutmanager.h"
using Mutex = interface::XFMutex; // Rename XFMutex interface class to Mutex for easier use.
// Implementation of the getInstance() method of the 'interface::XFTimeoutManager' class.
//
// Note: The implementation is done here because only in this file the real XFTimeoutManager
// class is known (port specific class). An instance of the XFTimeoutManager class is
// returned by the 'interface::XFTimeoutManager' class.
2023-09-26 14:26:07 +02:00
interface::XFTimeoutManager * interface::XFTimeoutManager::getInstance() {
2023-09-19 15:59:49 +02:00
static ::XFTimeoutManager timeoutManager;
return &timeoutManager;
}
// TODO: Implement code for XFTimeoutManager class
2023-09-26 14:26:07 +02:00
XFTimeoutManager::XFTimeoutManager() {
}
void XFTimeoutManager::addTimeout(XFTimeout *pNewTimeout) {
timeouts_.push_front(pNewTimeout);
}
2023-09-26 14:26:07 +02:00
void XFTimeoutManager::returnTimeout(XFTimeout *pTimeout) {
timeouts_.remove(pTimeout);
2023-09-26 14:26:07 +02:00
}
XFTimeoutManager::~XFTimeoutManager() {
}
void XFTimeoutManager::start(std::function<void (uint32_t)> startTimeoutManagerTimer) {
startTimeoutManagerTimer(tickInterval_);
}
void XFTimeoutManager::scheduleTimeout(int32_t timeoutId, int32_t interval, interface::XFBehavior *pBehavior) {
::XFTimeout* timeout = new XFTimeout(timeoutId, interval, pBehavior);
addTimeout(timeout);
2023-09-26 14:26:07 +02:00
}
void XFTimeoutManager::unscheduleTimeout(int32_t timeoutId, interface::XFBehavior *pBehavior) {
for(XFTimeout* timeout : timeouts_) {
bool id = ( timeout->getId() == timeoutId );
bool behavior = ( timeout->getBehavior() == pBehavior);
if( id && behavior ) {
timeouts_.remove(timeout);
}
}
}
void XFTimeoutManager::tick() {
for(XFTimeout* timeout : timeouts_) {
timeout->substractFromRelTicks(tickInterval_);
}
2023-09-26 14:26:07 +02:00
}
2023-09-19 15:59:49 +02:00
#endif // USE_XF_COMMON_TIMEOUTMANAGER_CLASS