Example #1
0
        //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;
            }
        }
Example #2
0
        /// <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());
        }
Example #3
0
        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;
            }
        }
Example #4
0
        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);
        }