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}'"); } }
public DirectDependencyReferenceViewModel(DependencyRange dependency, PackageViewModel referencer, DependencyCategoryViewModel dependencies, bool canUndoRedoCreation) : base(referencer, dependencies) { this.dependency = dependency; InitialUndelete(canUndoRedoCreation); }
// 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); } } } } }