예제 #1
0
 public virtual void VisitTransitionStatement(TransitionStatement transition)
 {
     if (transition.command == null)
     {
         if( !transition.Allow && !transition.Deny)
             PrintFunc("bool", ClassName + "::test" + GetState() + "To" + transition.targetstate, "()", "\treturn false;");
         if( !transition.NoExec)
             PrintFunc("void", ClassName + "::exec" + GetState() + "To" + transition.targetstate, "()");
     }
     else
     {
         if (!transition.Allow && !transition.Deny)
             PrintFunc("InterfaceResult::Enum", ClassName + "::test" + GetState() + "To" + transition.targetstate + "On" + transition.command, "(InterfaceParam* param)", "\treturn InterfaceResult::Unhandled;", "\t(void)param;");
         if (!transition.NoExec)
             PrintFunc("void", ClassName + "::exec" + GetState() + "To" + transition.targetstate + "On" + transition.command, "(InterfaceParam* param)", "\t(void)param;");
     }
 }
예제 #2
0
        public virtual void VisitTransitionStatement(TransitionStatement transition)
        {
            string state = GetState();
            if (state == null)
                throw new MalformedFSMException("Interface Command found outside of state block", transition.line);
            if (transition.command != null)
            {
                string transName = state + "To" + transition.targetstate + "On" + transition.command;
                stream.WriteLine("\tFSM::InterfaceTransition<" + ClassName + "> " + transName + ";");
                if(transition.Allow)
                    stream.WriteLine("\tFSM::InterfaceResult::Enum test" + transName + "(FSM::InterfaceParam* param) { (void)param; return FSM::InterfaceResult::Success; }");
                else if(transition.Deny)
                    stream.WriteLine("\tFSM::InterfaceResult::Enum test" + transName + "(FSM::InterfaceParam* param) { (void)param; return FSM::InterfaceResult::Failed; }");
                else
                    stream.WriteLine("\tFSM::InterfaceResult::Enum test" + transName + "(FSM::InterfaceParam* param);");
                if(!transition.NoExec)
                    stream.WriteLine("\tvoid exec" + state + "To" + transition.targetstate + "On" + transition.command + "(FSM::InterfaceParam* param);");
            }
            else
            {
                string transName = state + "To" + transition.targetstate;
                stream.WriteLine("\tFSM::Transition<" + ClassName + "> " + transName + ";");

                if(transition.Allow)
                    stream.WriteLine("\tbool test" + transName + "() { return true; }");
                else if(transition.Deny)
                    stream.WriteLine("\tbool test" + transName + "() { return false }");
                else
                    stream.WriteLine("\tbool test" + transName + "();");
                if (!transition.NoExec)
                    stream.WriteLine("\tvoid exec" + transName + "();");
            }
            stream.WriteLine();
        }
예제 #3
0
        public virtual void VisitTransitionStatement(TransitionStatement transition)
        {
            string state = GetState();

            if (transition.command == null)
            {
                if (state == null)
                    throw new MalformedFSMException("Interface Transition found outside of state block", transition.line);

                if(transition.NoExec)
                    stream.WriteLine("\t\tFSM_INIT_TRANSITION_NOEXEC(" + ClassName + ", " + GetState() + ", " + transition.targetstate + ");");
                else
                    stream.WriteLine("\t\tFSM_INIT_TRANSITION(" + ClassName + ", " + GetState() + ", " + transition.targetstate + ");");
            }
            else
            {
                if (state == null)
                    throw new MalformedFSMException("Interface Command found outside of state block", transition.line);

                if(transition.NoExec)
                    stream.WriteLine("\t\tFSM_INIT_INTERFACETRANSITION_NOEXEC(" + ClassName + ", " + GetState() + ", " + transition.command + ", " + transition.targetstate + ");");
                else
                    stream.WriteLine("\t\tFSM_INIT_INTERFACETRANSITION(" + ClassName + ", " + GetState() + ", " + transition.command + ", " + transition.targetstate + ");");
            }

            stream.WriteLine();
        }