Пример #1
0
        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);
                        }
                    }
                }
            }
        }
Пример #2
0
        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);
                        }
                    }
                }
            }
        }
Пример #3
0
 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);
     }
 }
Пример #4
0
 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);
     }
 }
Пример #5
0
 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;
     }
 }
Пример #6
0
        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;
        }
Пример #7
0
        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);
        }
Пример #8
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);
            }
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
                }
            }
        }
Пример #11
0
 public override void SyncInput(ConfigurationWithChannelData eStep, List <Configuration> list)
 {
     GetProcess(eStep.GlobalEnv).SyncInput(eStep, list);
 }
Пример #12
0
 ///// <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
 {
 }
Пример #13
0
        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);
            }
        }