/// <summary> /// Método para adicioanar uma árvore ao manipulador. /// </summary> /// <param name="treeName">Tipo de árvore a ser adicionada</param> public AbstractTree addTree(StructureType.Trees treeName, int ordem) { // Nova árvore criada AbstractTree newTree = factory.createObject(treeName); // Inicializa ordem, caso precise. newTree.init(ordem); // Flag de inserção. bool inserted = false; // Varre array para saber se já existe foreach (AbstractTree tree in trees) { // Verifica se já existe uma árvore deste tipo no array if (tree.GetType().FullName.Equals(newTree.GetType().FullName)) { // Caso haja, a antiga referência é removida. trees.Remove(tree); // E a nova inserida. trees.Add(newTree); inserted = true; break; } } // Se não foi inserido, adciona. if (!inserted) { // Adiciona nova entidade. trees.Add(newTree); } return(newTree); }
/// <summary> /// Método para remover uma árvore do manipulador. /// </summary> /// <param name="treeName">Tipo de árvore a ser removida</param> public void removeTree(StructureType.Trees treeName) { // Verifica se o array contém elementos. if (trees.Count > 0) { // Varre array para saber se já existe foreach (AbstractTree tree in trees) { // Verifica se já existe uma árvore deste tipo no array if (tree.GetType().Equals(System.Type.GetType(ClassMap.getClass(treeName)))) { // Remove o elemento. trees.Remove(tree); break; } } } }
/// <summary> /// Método para criar por reflexão a árvore /// </summary> /// <param name="treeName">Árvore a ser criada</param> /// <returns>Nova árvore</returns> public AbstractTree createObject(StructureType.Trees treeName) { // Variável de retorno. AbstractTree tree; try { // Obtem o tipo da classe a ser criada. System.Type treeType = System.Type.GetType(ClassMap.getClass(treeName), true); /// cria a instância da classe. tree = (AbstractTree)System.Activator.CreateInstance(treeType); } catch (TypeLoadException e) { throw new InvalidOperationException("Tipo não pode ser criado.", e); } return(tree); }
/// <summary> /// Método para obter o mapeamento de uma classe, passando o nome da árvore. /// </summary> /// <param name="treeName">Nome da árvore</param> /// <returns>mapa da classe</returns> public static string getClass(StructureType.Trees treeName) { // Verifica o qual é o nome da árvore. switch (treeName) { // Caso seja a AVL. case StructureType.Trees.AVL: return(avl); // Caso seja a B. case StructureType.Trees.B: return(b); // Caso seja a Bnaria. case StructureType.Trees.Binary: return(binary); // Caso seja a Splay. case StructureType.Trees.Splay: return(splay); } // Retorno padrão. return(ClassMap.BINARY); }