Example #1
0
        /// <summary>
        ///     Perform the topological sort algorithm on our graph
        /// </summary>
        private IList TopologicalSort(DependencyMap dependents, DependencyMap precedents, IList sources)
        {
            var   q                = new Queue(sources);
            IList output           = new ArrayList();
            IList directDependents = new ArrayList();

            while (q.Count > 0)
            {
                var n = (Reference)q.Dequeue();
                output.Add(n);

                directDependents.Clear();
                dependents.GetDirectDependents(n, directDependents);

                foreach (Reference m in directDependents)
                {
                    dependents.RemoveDependency(n, m);
                    precedents.RemoveDependency(m, n);
                    if (precedents.ContainsTail(m) == false)
                    {
                        q.Enqueue(m);
                    }
                }
            }

            // We assume no circular references
            return(output);
        }
Example #2
0
 private void RemoveDependency(Reference tail, Reference head, DependencyMap map, DependencyMap inverseMap)
 {
     map.RemoveDependency(tail, head);
     inverseMap.RemoveDependency(head, tail);
 }