コード例 #1
0
        public override void MakeDiscreteTransition(List <Expression> guards, List <Event> events, List <Expression> programBlocks, List <Process> processes, Model model, SymbolicLTS lts)
        {
            lts.AddParaInChannelAsLocalVar(ExpressionList);

            if (model.mapChannelToSize.ContainsKey(ChannelName))
            {
                List <Expression> guardUpdateChannel = AutomataBDD.GetGuardUpdateOfChannelInput(this.ChannelName, new BoolConstant(true), new List <Expression>(ExpressionList), AssignmentExpr, model);
                guardUpdateChannel[0] = Expression.AND(guardUpdateChannel[0], this.GuardExpression);

                Event channelInput = new BDDEncoder.EventChannelInfo(this.ChannelName, 0, BDDEncoder.EventChannelInfo.EventType.ASYNC_CHANNEL_INPUT);

                guards.Add(guardUpdateChannel[0]);
                events.Add(channelInput);
                programBlocks.Add(guardUpdateChannel[1]);
                processes.Add(Process);
            }
            else
            {
                Event channelInput = new BDDEncoder.EventChannelInfo(this.ChannelName, 0, BDDEncoder.EventChannelInfo.EventType.SYNC_CHANNEL_INPUT);
                channelInput.ExpressionList = this.ExpressionList;

                guards.Add(null);
                events.Add(channelInput);
                programBlocks.Add(null);
                processes.Add(Process);
            }
        }
コード例 #2
0
ファイル: ChannelOutput.cs プロジェクト: cnacha/PAT.ADL
        public override void MakeDiscreteTransition(List <Expression> guards, List <Event> events, List <Expression> programBlocks, List <Process> processes, Model model, SymbolicLTS lts)
        {
            if (model.mapChannelToSize.ContainsKey(ChannelName))
            {
                List <Expression> guardUpdateChannel = AutomataBDD.GetGuardUpdateOfChannelOutput(this.ChannelName, new List <Expression>(ExpressionList), null, model);
                Event             channelOutput      = new BDDEncoder.EventChannelInfo(this.ChannelName, 0, BDDEncoder.EventChannelInfo.EventType.ASYNC_CHANNEL_OUTPUT);

                guards.Add(guardUpdateChannel[0]);
                events.Add(channelOutput);
                programBlocks.Add(guardUpdateChannel[1]);
                processes.Add(Process);
            }
            else
            {
                Event channelOutput = new BDDEncoder.EventChannelInfo(this.ChannelName, 0, BDDEncoder.EventChannelInfo.EventType.SYNC_CHANNEL_OUTPUT);
                channelOutput.ExpressionList = this.ExpressionList;

                guards.Add(null);
                events.Add(channelOutput);
                programBlocks.Add(null);
                processes.Add(Process);
            }
        }