//appends nodes to list private void AppendNodes(Node <K, T> node, List <T> values, TreeOrder order) { if (node == null) { return; } switch (order) { case TreeOrder.InOrder: AppendNodes(node.Left, values, order); values.Add(node.Value); AppendNodes(node.Right, values, order); break; case TreeOrder.PreOrder: values.Add(node.Value); AppendNodes(node.Left, values, order); AppendNodes(node.Right, values, order); break; case TreeOrder.PostOrder: AppendNodes(node.Left, values, order); AppendNodes(node.Right, values, order); values.Add(node.Value); break; } }
/// <summary> /// returns an array representation of the tree /// </summary> public T[] ToArray(TreeOrder order) { if (_root == null) { return(null); } List <T> values = new List <T>(); AppendNodes(_root, values, order); return(values.ToArray()); }
public void printTree(Node root, TreeOrder order) { switch (order) { case TreeOrder.inOrder: inOrderTransversal(root); break; case TreeOrder.preOrder: preOrderTransversal(root); break; case TreeOrder.postOrder: postOrderTransversal(root); break; default: break; } }
public static IEnumerable <TypeDefinition> GetUsedTypesOrdered(MethodReference entryPoint) { // Load assembly //var assembly = entryPoint.DeclaringType.Module.Assembly; //var projectName = assembly.MainModule.Name.ToString().Replace(".exe", "").Replace(".dll", ""); var unorderedTypes = new NewUsedTypeAnalysis().GetUsedTypes(entryPoint).ToList(); // todo new replace base types //why don;t generics show up in used? // order by subtypes. EObject is the root. var usedTypes = TreeOrder.Order(unorderedTypes.First(x => x.Name == "EObject"), unorderedTypes); // add Value types (which are not derived from EObject) var valueTypes = unorderedTypes.Where(x => x.IsValueType); usedTypes = usedTypes.Take(1).Concat(valueTypes).Concat(usedTypes.Skip(1)).ToList(); // make sure the structs are in order valueTypes = TreeOrder.StructOrder(valueTypes); // todo: interfaces should be tree ordered as well usedTypes.AddRange(unorderedTypes.Where(x => x.IsInterface)); if (usedTypes.Count != unorderedTypes.Count) { var missing = unorderedTypes.Where(x => !usedTypes.Contains(x)).ToArray(); Debug.Assert(false, missing.ToString()); } //// move ESharpCore as first file for header definitions //var core = usedTypes.Single(x => x.Name == "ESharpCore"); //usedTypes.Remove(core); //usedTypes.Insert(0, core); return(usedTypes); }