public override void SyncInput(ConfigurationWithChannelData eStep, List <Configuration> list) { for (int i = 0; i < Processes.Count; i++) { Process process = Processes[i]; List <Configuration> list1 = new List <Configuration>(); process.SyncInput(eStep, list1); if (list1.Count > 0) { List <Dictionary <string, int> > nextProcessCounters = Common.Classes.Ultility.Ultility.ProcessCounterDecrement(MustAbstract?Common.Classes.Ultility.Ultility.CutNumber:-1, ProcessesCounter, process.ProcessID, 1); for (int j = 0; j < list1.Count; j++) { Configuration step = list1[j]; foreach (Dictionary <string, int> ints in nextProcessCounters) { List <Process> newProcess = new List <Process>(Processes); Dictionary <string, int> listInstance = new Dictionary <string, int>(ints); AddOneProcess(newProcess, step.Process, listInstance); IndexInterleaveAbstract interleave = new IndexInterleaveAbstract(newProcess, listInstance); step.Process = interleave; list.Add(step); } } } } }
public override void SyncOutput(Valuation GlobalEnv, List <ConfigurationWithChannelData> list) { for (int i = 0; i < Processes.Count; i++) { Process process = Processes[i]; List <ConfigurationWithChannelData> list1 = new List <ConfigurationWithChannelData>(); process.SyncOutput(GlobalEnv, list1); if (list1.Count > 0) { List <Dictionary <string, int> > nextProcessCounters = Common.Classes.Ultility.Ultility.ProcessCounterDecrement(MustAbstract ? Common.Classes.Ultility.Ultility.CutNumber : -1, ProcessesCounter, process.ProcessID, 1); for (int j = 0; j < list1.Count; j++) { ConfigurationWithChannelData step = list1[j]; foreach (Dictionary <string, int> ints in nextProcessCounters) { List <Process> newProcess = new List <Process>(Processes); Dictionary <string, int> listInstance = new Dictionary <string, int>(ints); AddOneProcess(newProcess, step.Process, listInstance); IndexInterleaveAbstract interleave = new IndexInterleaveAbstract(newProcess, listInstance); ConfigurationWithChannelData newStep = new ConfigurationWithChannelData(interleave, step.Event, step.DisplayName, step.GlobalEnv, step.IsDataOperation, list1[j].ChannelName, list1[j].Expressions); newStep.IsAtomic = step.IsAtomic; list.Add(newStep); } } } } }
public override void SyncInput(ConfigurationWithChannelData eStep, List <Configuration> list) { Process.SyncInput(eStep, list); for (int i = 0; i < list.Count; i++) { list[i].Process = new Hiding(list[i].Process, HidingAlphabets); } }
public override void SyncInput(ConfigurationWithChannelData eStep, List <Configuration> list) { for (int i = 0; i < Processes.Count; i++) { List <Configuration> list1 = new List <Configuration>(); Processes[i].SyncInput(eStep, list1); list.AddRange(list1); } }
public override void SyncInput(ConfigurationWithChannelData eStep, List <Configuration> list) { Process.SyncInput(eStep, list); for (int i = 0; i < list.Count; i++) { list[i].Process = new AtomicProcess(list[i].Process); list[i].IsAtomic = true; } }
public override void SyncInput(ConfigurationWithChannelData eStep, List <Configuration> list) { string channelName = this.ChannelName; if (ChannelIndex != null) { int size = ((IntConstant)EvaluatorDenotational.Evaluate(ChannelIndex, eStep.GlobalEnv)).Value; if (size >= Specification.ChannelArrayDatabase[ChannelName]) { throw new PAT.Common.Classes.Expressions.ExpressionClass.IndexOutOfBoundsException("Channel index out of bounds for expression " + this.ToString()); } channelName = channelName + "[" + size + "]"; } //List<Configuration> list = new List<Configuration>(1); if (eStep.ChannelName == channelName && eStep.Expressions.Length == ExpressionList.Length) { Dictionary <string, Expression> mapping = new Dictionary <string, Expression>(eStep.Expressions.Length); for (int i = 0; i < ExpressionList.Length; i++) { Expression v = eStep.Expressions[i]; if (ExpressionList[i] is Variable) { mapping.Add(ExpressionList[i].ExpressionID, v); } else { if (v.ExpressionID != ExpressionList[i].ExpressionID) { return; } } } Expression guard = GuardExpression.ClearConstant(mapping); ExpressionValue value = EvaluatorDenotational.Evaluate(guard, eStep.GlobalEnv); if ((value as BoolConstant).Value) { Configuration vm; if (mapping.Count > 0) { vm = new Configuration(Process.ClearConstant(mapping), null, null, eStep.GlobalEnv, false); } else { vm = new Configuration(Process, null, null, eStep.GlobalEnv, false); } list.Add(vm); } } //return list; }
public override void SyncInput(ConfigurationWithChannelData eStep, List <Configuration> list) { ExpressionValue v = EvaluatorDenotational.Evaluate(Condition, eStep.GlobalEnv); if ((v as BoolConstant).Value) { Process.SyncInput(eStep, list); } //return new List<Configuration>(0); }
public override void SyncInput(ConfigurationWithChannelData eStep, List <Configuration> list) { if (FirstProcess.IsSkip()) { SecondProcess.SyncInput(eStep, list); return; } FirstProcess.SyncInput(eStep, list); for (int i = 0; i < list.Count; i++) { list[i].Process = new Sequence(list[i].Process, SecondProcess); } }
public override void SyncInput(ConfigurationWithChannelData eStep, List <Configuration> list) { FirstProcess.SyncInput(eStep, list); for (int i = 0; i < list.Count; i++) { Configuration step = list[i]; if (step.Event != Constants.TERMINATION) { Interrupt inter = new Interrupt(step.Process, SecondProcess); step.Process = inter; } list[i] = step; } SecondProcess.SyncInput(eStep, list); }
public override void SyncInput(ConfigurationWithChannelData eStep, List <Configuration> list) { //List<Configuration> returnList = new List<Configuration>(); for (int i = 0; i < Processes.Count; i++) { Process process = Processes[i]; List <Configuration> list1 = new List <Configuration>(); process.SyncInput(eStep, list1); for (int j = 0; j < list1.Count; j++) { Configuration step = list1[j]; List <Process> newProcess = new List <Process>(Processes.Count); newProcess.AddRange(Processes); newProcess[i] = step.Process; step.Process = new IndexInterleave(newProcess); list.Add(step); } } }
public override void SyncInput(ConfigurationWithChannelData eStep, List <Configuration> list) { GetProcess(eStep.GlobalEnv).SyncInput(eStep, list); }
///// <summary> ///// returns all the possible synchoronous input process on the given channel ///// </summary> ///// <returns></returns> public virtual void SyncInput(ConfigurationWithChannelData eStep, List <Configuration> list) //, string syncChannel, Expression[] values { }
public override void SyncInput(ConfigurationWithChannelData eStep, List <Configuration> list) { string channelName = this.ChannelName; if (ChannelIndex != null) { int size = ((IntConstant)EvaluatorDenotational.Evaluate(ChannelIndex, eStep.GlobalEnv)).Value; if (size >= Specification.ChannelArrayDatabase[ChannelName]) { throw new PAT.Common.Classes.Expressions.ExpressionClass.IndexOutOfBoundsException("Channel index out of bounds for expression " + this.ToString()); } channelName = channelName + "[" + size + "]"; } if (eStep.ChannelName == channelName && eStep.Expressions.Length == ExpressionList.Length) { Dictionary <string, Expression> mapping = new Dictionary <string, Expression>(eStep.Expressions.Length); for (int i = 0; i < ExpressionList.Length; i++) { Expression v = eStep.Expressions[i]; if (ExpressionList[i] is Variable) { mapping.Add(ExpressionList[i].ExpressionID, v); //.GetID() } else { if (v.ExpressionID != ExpressionList[i].ExpressionID) //.GetID() { return; } } } Valuation newGlobleEnv = eStep.GlobalEnv.GetVariableClone(); EvaluatorDenotational.Evaluate(AssignmentExpr.ClearConstant(mapping), newGlobleEnv); if (HasLocalVar) { Valuation tempEnv = eStep.GlobalEnv.GetVariableClone(); for (int i = 0; i < tempEnv.Variables._entries.Length; i++) { StringDictionaryEntryWithKey <ExpressionValue> pair = tempEnv.Variables._entries[i]; if (pair != null) { pair.Value = newGlobleEnv.Variables[pair.Key]; } } newGlobleEnv = tempEnv; } Configuration vm; if (mapping.Count > 0) { vm = new Configuration(Process.ClearConstant(mapping), null, null, newGlobleEnv, false); } else { vm = new Configuration(Process, null, null, newGlobleEnv, false); } list.Add(vm); } }