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