Esempio n. 1
0
 private void ProcessLinkerDependents(Reference intersect, IList linkerDependents,
                                      IntersectingDependantProcessor processor)
 {
     foreach (Reference linkerDependant in linkerDependents)
     {
         processor(intersect, linkerDependant);
     }
 }
Esempio n. 2
0
        /// <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);
            }
        }
Esempio n. 3
0
        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);
            }
        }