private void ProcessLinkerDependents(Reference intersect, IList linkerDependents, IntersectingDependantProcessor processor) { foreach (Reference linkerDependant in linkerDependents) { processor(intersect, linkerDependant); } }
/// <summary> /// Creates or removes range links /// </summary> /// <remarks> /// A range link is an optimization for dependencies involving ranges. Given a reference to a range, we find /// all non-range references that intersect it. We then create dependencies (or links) between those references and /// all depedendents of the target range. If we didn't do this, then when walking a dependency chain, we'd have /// to find all intersecting references for each reference along the chain. /// </remarks> private void ProcessRangeLinks(IntersectingDependantProcessor processor) { IList linkers = FindReferences(new RangeLinkPredicate()); foreach (Reference linker in linkers) { IList intersecting = FindReferences(new LinkerIntersectPredicate(linker)); ProcessLinkerIntersects(linker, intersecting, processor); } }
private void ProcessLinkerIntersects(Reference linker, IList intersecting, IntersectingDependantProcessor processor) { IList linkerDependents = new ArrayList(); _dependents.GetDirectDependents(linker, linkerDependents); foreach (Reference intersect in intersecting) { ProcessLinkerDependents(intersect, linkerDependents, processor); } }