#include "RUStateDelegate.h" NS_RU_BEGIN void StateDelegate::setUserObject(void *userObject) { _userObject = userObject; } void* StateDelegate::getUserObject() { return _userObject; } void StateDelegate::execStateAct(State* state, const StateActInfo* stateActInfo, const std::map& eventParams, const std::function& actFinishCb) { if (actFinishCb) { actFinishCb(); } } void StateDelegate::execStateActList(State* state, const std::vector& stateActsInfo, const std::function& actFinishCb) { execStateActList(state, stateActsInfo, {}, actFinishCb); } void StateDelegate::execStateActList(State* state, const std::vector& stateActsInfo, const std::map& eventParams, const std::function& actFinishCb) { if(stateActsInfo.size() == 0) { execStateAct(state, nullptr, eventParams, actFinishCb); } else { execStateActListRecursively(state, stateActsInfo, eventParams, actFinishCb); } } void StateDelegate::execStateActListRecursively(State* state, const std::vector& stateActsInfo, const std::function& actFinishCb) { execStateActListRecursively(state, stateActsInfo, {}, actFinishCb); } void StateDelegate::execStateActListRecursively(State* state, const std::vector& stateActsInfo, const std::map& eventParams, const std::function& actFinishCb) { if(stateActsInfo.size() == 0){ if (actFinishCb) { actFinishCb(); } return; } auto execNextActs = [=](void){ auto newActs = stateActsInfo; newActs.erase(newActs.begin()); execStateActListRecursively(state, newActs, eventParams, actFinishCb); }; execStateAct(state, &stateActsInfo.at(0), eventParams, execNextActs); } void StateDelegate::entry(State* state, const std::vector& stateActInfo, std::function actFinishCb) { execStateActList(state, stateActInfo, actFinishCb); } void StateDelegate::idle(State* state, const std::vector& stateActInfo, std::function actFinishCb) { execStateActList(state, stateActInfo, actFinishCb); } void StateDelegate::exit(State* state, const std::vector& stateActInfo, std::function actFinishCb) { execStateActList(state, stateActInfo, actFinishCb); } void StateDelegate::beforeSwitch(State* state, const std::vector& stateActInfo, StateActInfo evt, std::function actFinishCb) { execStateActList(state, stateActInfo, evt.actParams, actFinishCb); } void StateDelegate::afterSwitch(State* state, const std::vector& stateActInfo, StateActInfo evt, std::function actFinishCb) { execStateActList(state, stateActInfo, evt.actParams, actFinishCb); } NS_RU_END