Example #1
0
		private static int[] GetTopologicalSortOrder(List<DependentAlias> fields)
		{
			TopologicalSorter g = new TopologicalSorter(fields.Count);
			Dictionary<string, int> _indexes = new Dictionary<string, int>();

			// add vertices
			for (int i = 0; i < fields.Count; i++)
			{
				_indexes[fields[i].Alias.ToLower()] = g.AddVertex(i);
			}

			// add edges
			for (int i = 0; i < fields.Count; i++)
			{
				if (fields[i].DependsOn != null)
				{
					for (int j = 0; j < fields[i].DependsOn.Length; j++)
					{
						var dependentField = fields[i].DependsOn[j].ToLower();
						if (_indexes.ContainsKey(dependentField))
						{
							g.AddEdge(i, _indexes[dependentField]);
						}
					}
				}
			}

			return g.Sort();
		}