public void CanLookupPartsUsingTheProvidedFilter () { // given var craft = createTestCraft (); var parts = craft.Children<KspPartObject> ().ToArray (); var target = new PartLookup (craft); // when / then Assert.That (target.LookupParts (new RegexFilter ("2")), Is.EqualTo (new[] { parts [2] })); Assert.That (target.LookupParts (new RegexFilter ("part[5-7]")), Is.EqualTo (new[] { parts [4], parts [5], parts [6] })); }
private List<KspPartObject> FindParts (KspCraftObject craft, RegexFilter filter) { ui.DisplayUserMessage ($"Entering craft '{craft.Name}'..."); var partLookup = new PartLookup (craft); var parts = partLookup.LookupParts (filter).ToList (); ui.DisplayUserMessage ($"Found {parts.Count} matching parts"); return parts; }
private Dictionary<KspPartObject, List<KspPartLinkProperty>> FindPartDependencies (KspCraftObject craft, RegexFilter filter) { ui.DisplayUserMessage ($"Entering craft '{craft.Name}'..."); var partLookup = new PartLookup (craft); var dependencies = partLookup.LookupParts (filter).ToList (); var dependentParts = new HashSet<KspPartObject> (); Parallel.ForEach (dependencies, dependency => { foreach (var part in partLookup.LookupSoftDependencies (dependency)) { lock (dependentParts) { dependentParts.Add (part); } } }); ui.DisplayUserMessage ($"Found {dependentParts.Count} dependent parts"); return dependentParts.ToDictionary (part => part, part => FindPartLinks (part, dependencies)); }
private List<KspPartObject> FindRemovedAndDependentParts (KspCraftObject craft, RegexFilter filter) { ui.DisplayUserMessage ($"Entering craft '{craft.Name}'..."); var partLookup = new PartLookup (craft); var removedParts = partLookup.LookupParts (filter).ToList (); ui.DisplayUserMessage ($"Found {removedParts.Count} parts to be removed"); var dependentParts = new HashSet<KspPartObject> (); Parallel.ForEach (removedParts, removedPart => { foreach (var part in partLookup.LookupHardDependencies (removedPart).Except (removedParts)) { lock (dependentParts) { dependentParts.Add (part); } } }); ui.DisplayUserMessage ($"Found {dependentParts.Count} dependent parts"); return removedParts.Concat (dependentParts).ToList (); }