コード例 #1
0
 private void CheckObjectsInterMachines()
 {
     for (int i = 0; i < Trees.Count - 1; i++)
     {
         BasicObjectsTree tree1 = Trees[i];
         for (int j = i + 1; j < Trees.Count; j++)
         {
             BasicObjectsTree tree2 = Trees[j];
             var list = tree1.UsedObjects.Keys.Intersect(tree2.UsedObjects.Keys);
             foreach (DrawableObject obj in list)
             {
                 MessagesList.Add(new CheckMessage(CheckMessage.MessageTypes.Error, string.Format("Object '{0}' is shared between '{1}' and '{2}' machines.", obj.Name, tree1.Root.Name, tree2.Root.Name), obj));
             }
         }
     }
 }
コード例 #2
0
ファイル: MachineStatus.cs プロジェクト: phasesfsm/phasesfsm
 public MachineStatus(GeneratorData data, IMachine mach, BasicObjectsTree tree, bool markStart = true)
     : base(mach as IBasicGlobal, data)
 {
     Owner = null;
     Node  = mach;
     Tree  = tree;
     if (markStart)
     {
         mach.Origin.SimulationMark = SimulationMark.ExecutingObject;
     }
     CurrentState = mach.Root;
     if (mach.Father is BasicMachine bmach)
     {
         foreach (BasicState bstate in bmach.States)
         {
             if (bstate != mach)
             {
                 bstate.SimulationMark = SimulationMark.None;
             }
         }
     }
 }
コード例 #3
0
        private void BuildBasicObjectsTrees()
        {
            Trees           = new List <BasicObjectsTree>();
            GlobalObjects   = new List <IBasicGlobal>();
            BasicStatesList = new List <BasicState>();
            foreach (IGlobal global in Book.Globals)
            {
                switch (global)
                {
                case Origin origin:
                    if (origin.Father == null)
                    {
                        var basicObjectsTree = new BasicObjectsTree(origin.OwnerDraw.OwnerSheet, origin);
                        Trees.Add(basicObjectsTree);
                        if (!basicObjectsTree.AddStatesToList(BasicStatesList))
                        {
                            MessagesList.Add(new CheckMessage(CheckMessage.MessageTypes.Error, "There is one or more states used in diferent state machines.", null));
                        }
                        GlobalObjects.Add(basicObjectsTree);
                    }
                    break;

                case Relation indir:
                    GlobalObjects.Add(RelationsList.Find(bi => bi.Relation == indir));
                    break;

                case Equation eq:
                    GlobalObjects.Add(EquationsList.Find(be => be.Equation == eq));
                    break;
                }
            }
            if (Trees.Count == 0)
            {
                MessagesList.Add(new CheckMessage(CheckMessage.MessageTypes.Error, "There is not a valid state machine to check.", null));
            }
        }
コード例 #4
0
 public SubMachineStatus(MachineStatus owner, IMachine mach, BasicObjectsTree tree, bool markStart = true)
     : base(owner.Data, mach, tree, markStart)
 {
     Owner = owner;
 }
コード例 #5
0
ファイル: Project.cs プロジェクト: phasesfsm/phasesfsm
        bool ProccessDirs(string scriptsPath, string destPath)
        {
            bool res;

            try
            {
                foreach (string subdir in Directory.GetDirectories(scriptsPath))
                {
                    string dirName = Path.GetFileName(subdir);
                    string finalDirName, finalPath = destPath;
                    switch (dirName)
                    {
                    case "@project":
                        finalDirName = dirName.Replace("@project", Name);
                        finalPath    = Path.Combine(destPath, finalDirName);
                        Directory.CreateDirectory(finalPath);
                        break;

                    case "@machine":
                        foreach (BasicObjectsTree tree in Data.Trees)
                        {
                            activeMachine = tree;
                            finalDirName  = dirName.Replace("@project", tree.Name);
                            finalPath     = Path.Combine(destPath, tree.Name);
                            Directory.CreateDirectory(finalPath);
                            foreach (string filePath in Directory.GetFiles(subdir))
                            {
                                string fileName = Path.GetFileName(filePath);
                                res = ProccessScript(filePath, finalPath, fileName);
                                if (!res)
                                {
                                    return(false);
                                }
                            }
                        }
                        ProccessDirs(subdir, finalPath);
                        continue;

                    default:
                        finalDirName = dirName;
                        break;
                    }
                    activeMachine = null;
                    foreach (string filePath in Directory.GetFiles(subdir))
                    {
                        string fileName = Path.GetFileName(filePath);
                        res = ProccessScript(filePath, finalPath, fileName);
                        if (!res)
                        {
                            return(false);
                        }
                    }
                    ProccessDirs(subdir, finalPath);
                }
            }
            catch (Exception)
            {
                return(false);
            }
            return(true);
        }