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.
XF/src/simplified/xf/core/behavior.cpp

67 lines
1.6 KiB
C++
Raw Normal View History

2023-09-19 15:59:49 +02:00
#include <cassert>
#include "xf/timeout.h"
#include "xf/initialevent.h"
#include "xf/behavior.h"
2023-10-17 15:12:51 +02:00
#include "trace/trace.h"
2023-09-19 15:59:49 +02:00
XFBehavior::XFBehavior() {
2023-10-17 14:18:38 +02:00
this->deleteOnTerminate_ = false;
}
XFBehavior::~XFBehavior() {
}
void XFBehavior::startBehavior() {
GEN(XFInitialEvent());
}
void XFBehavior::pushEvent(XFEvent *pEvent) {
2023-10-17 14:18:38 +02:00
if(pEvent->getBehavior()==nullptr) {
pEvent->setBehavior(this);
}
this->getDispatcher()->pushEvent(pEvent);
}
bool XFBehavior::deleteOnTerminate() const {
2023-10-17 14:18:38 +02:00
return this->deleteOnTerminate_;
}
void XFBehavior::setDeleteOnTerminate(bool deleteBehaviour) {
2023-10-17 14:18:38 +02:00
this->deleteOnTerminate_ = deleteBehaviour;
}
const XFEvent *XFBehavior::getCurrentEvent() const {
2023-10-17 14:18:38 +02:00
return this->pCurrentEvent_;
}
interface::XFDispatcher *XFBehavior::getDispatcher() {
return interface::XFDispatcher::getInstance();
}
const XFTimeout *XFBehavior::getCurrentTimeout() {
if(pCurrentEvent_->getEventType() == XFEvent::Timeout) {
2023-10-17 14:18:38 +02:00
return (XFTimeout*) this->pCurrentEvent_;
} else {
return nullptr;
}
}
void XFBehavior::setCurrentEvent(const XFEvent *pEvent) {
2023-10-17 14:18:38 +02:00
this->pCurrentEvent_ = pEvent;
}
XFBehavior::TerminateBehavior XFBehavior::process(const XFEvent *pEvent) {
2023-10-17 14:18:38 +02:00
this->setCurrentEvent(pEvent);
XFEventStatus status = XFEventStatus::Unknown;
2023-10-17 14:18:38 +02:00
status = this->processEvent();
if(status == XFEventStatus::Consumed && pEvent->deleteAfterConsume()) {
delete pEvent;
}
XFBehavior::TerminateBehavior terminateBehavior = false;
if(status == XFEventStatus::Terminate) {
terminateBehavior = true;
}
2023-10-17 14:18:38 +02:00
return terminateBehavior;
}