Example #1
0
 public void AddDependency(PackageViewModel packageViewModel)
 {
     using (var transaction = UndoRedoService.CreateTransaction())
     {
         DependencyRange dependency;
         if (packageViewModel.Package.Container is SolutionProject project)
         {
             dependency = new DependencyRange(packageViewModel.Name, new PackageVersionRange(packageViewModel.Package.Meta.Version, true), DependencyType.Project)
             {
                 MSBuildProject = project.FullPath,
             };
         }
         else
         {
             dependency = new DependencyRange(packageViewModel.Name, new PackageVersionRange(packageViewModel.Package.Meta.Version, true), DependencyType.Package);
         }
         var reference = new DirectDependencyReferenceViewModel(dependency, this, Dependencies, true);
         UndoRedoService.SetName(transaction, $"Add dependency to package '{reference.Name}'");
     }
 }
Example #2
0
 public DirectDependencyReferenceViewModel(DependencyRange dependency, PackageViewModel referencer, DependencyCategoryViewModel dependencies, bool canUndoRedoCreation)
     : base(referencer, dependencies)
 {
     this.dependency = dependency;
     InitialUndelete(canUndoRedoCreation);
 }
Example #3
0
        // loader からデータを読みだして配列を作成、MainForm::insnsに置き換え
        // この時AddConsumerしている
        private void LoadInsns()
        {
            if (loader == null)
            {
                return;
            }


            coordinateSystem.SetInsnRange(loginfo.MinInsnId, loginfo.MaxInsnId);
            insns            = new Insn[coordinateSystem.ViewInsnCount];
            dependencyRanges = new DependencyRange[coordinateSystem.ViewInsnCount];

            long  cycleFrom = long.MaxValue;
            long  cycleTo   = long.MinValue;
            ulong idFrom    = coordinateSystem.IdFrom;
            ulong idTo      = coordinateSystem.IdTo;

            for (ulong id = idFrom; id <= idTo; id++)
            {
                Insn insn = null;

                try
                {
                    //insn = db.Read(id);
                    insn = loader.GetInsnFromDB(id);
                }
                catch (ArgumentOutOfRangeException)
                {
                    insn = null;
                }
                insns[id - idFrom]            = insn;
                dependencyRanges[id - idFrom] = new DependencyRange(id, id);
                if (insn == null)
                {
                    continue;
                }
                if (cycleFrom > insn.StartCycle)
                {
                    cycleFrom = insn.StartCycle;
                }
                if (cycleTo < insn.EndCycle)
                {
                    cycleTo = insn.EndCycle;
                }
            }

            if (cycleFrom == long.MaxValue)
            {
                cycleTo = cycleFrom = 0;
            }

            coordinateSystem.SetCycleRange(cycleFrom, cycleTo);

            // Extract dependencies.
            foreach (Insn consinsn in insns)
            {
                if (consinsn == null)
                {
                    continue;
                }

                foreach (Insn.Relation r in consinsn.Producers)
                {
                    Insn prodinsn = GetInsn(r.id);
                    if (prodinsn != null)
                    {
                        Insn.Relation rel = new Insn.Relation();
                        rel.id   = consinsn.Id;
                        rel.type = r.type;
                        prodinsn.AddConsumer(rel);

                        // i を横切る依存関係のうち最大と最小の範囲を登録
                        ulong front = Math.Min(r.id, consinsn.Id);
                        ulong back  = Math.Max(r.id, consinsn.Id);
                        for (ulong i = front; i <= back; i++)
                        {
                            dependencyRanges[i - idFrom].SetRange(front, back);
                        }
                    }
                }
            }

            // Extract execution stages.
            // Stage names including "X" are regarded as execution stages.
            for (int i = 0; i < loginfo.SegmentCount; ++i)
            {
                foreach (var stageName in loginfo.StageNames[i])
                {
                    if (stageName.Contains("X"))
                    {
                        int id = loginfo.GetStageId(i, stageName);
                        if (id >= 0)
                        {
                            ExecStageInfo info;
                            info.lane = i;
                            info.id   = id;
                            ExecStageId.Add(info);
                        }
                    }
                }
            }
        }