Пример #1
0
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;
    }
Пример #2
0
 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));
       }
     });
 }
Пример #3
0
 inline void SpawnTask::OnCancel() {
   m_syncTrigger.Do(
     [=] {
       if(m_state == 1) {
         return S2(StateEntry(State::CANCELED));
       }
     });
 }
Пример #4
0
 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();
 }
Пример #5
0
  inline void SpawnTask::S5() {
    m_state = 5;
    if(m_taskCount == 0 && m_triggerIsComplete) {

      // C0
      return S2(StateEntry(State::COMPLETE));
    } else {

      //! ~C0
      return S1();
    }
  }
Пример #6
0
 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()));
     }
   }
 }