int main(int argc, char* argv[]) { StateSet entries; StateCreatorFunction initFunc(InitState::createState); entries.insert(StateEntry(INIT, "init", initFunc)); StateCreatorFunction stopFunc(StopState::createState); entries.insert(StateEntry(STOP, "stop", stopFunc)); StateEntry entryArray[] = { StateEntry(INIT, "init", initFunc), StateEntry(STOP, "stop", stopFunc) }; StateSet entires2(entryArray, entryArray + (sizeof(entryArray) / sizeof(entryArray[0]))); StateSet::iterator it = entries.find(INIT); boost::shared_ptr<State> s1 = it->creatorFunction_(); StateSet::nth_index<1>::type::iterator it2 = entries.get<1>().find("stop"); boost::shared_ptr<State> s2 = it2->creatorFunction_(); std::cout << "State name: " << s1->name() << std::endl; std::cout << "State name: " << s2->name() << std::endl; BOOST_FOREACH(const StateEntry& entry, entires2) { std::cout << entry.umStateName_ << std::endl; }
inline void UntilTask::OnCancel() { m_trigger.Do( [=] { if(m_state == 0) { return S1(StateEntry(State::CANCELED)); } else if(m_state == 4) { return S1(StateEntry(State::CANCELED)); } }); }
inline void SpawnTask::OnCancel() { m_syncTrigger.Do( [=] { if(m_state == 1) { return S2(StateEntry(State::CANCELED)); } }); }
inline void SpawnTask::OnTrigger(const Expect<void>& value) { if(m_state != 1) { return; } try { value.Get(); } catch(const std::exception& e) { return S3(StateEntry(State::FAILED, e.what())); } return S4(); }
inline void SpawnTask::S5() { m_state = 5; if(m_taskCount == 0 && m_triggerIsComplete) { // C0 return S2(StateEntry(State::COMPLETE)); } else { //! ~C0 return S1(); } }
inline void UntilTask::OnCondition(const Expect<bool>& condition) { if(m_state == 0) { try { if(condition.Get()) { return S1(StateEntry(State::COMPLETE)); } else { return S2(); } } catch(const std::exception& e) { return S3(StateEntry(State::FAILED, e.what())); } } else if(m_state == 4) { try { if(condition.Get()) { return S1(StateEntry(State::COMPLETE)); } } catch(const std::exception& e) { return S3(StateEntry(State::FAILED, e.what())); } } }