br.usp.poli.lta.cereda.aa.model.Stack.java Source code

Java tutorial

Introduction

Here is the source code for br.usp.poli.lta.cereda.aa.model.Stack.java

Source

/**
* ------------------------------------------------------
*    Laboratrio de Linguagens e Tcnicas Adaptativas
*       Escola Politcnica, Universidade So Paulo
* ------------------------------------------------------
* 
* This program is free software: you can redistribute it
* and/or modify  it under the  terms of the  GNU General
* Public  License  as  published by  the  Free  Software
* Foundation, either  version 3  of the License,  or (at
* your option) any later version.
* 
* This program is  distributed in the hope  that it will
* be useful, but WITHOUT  ANY WARRANTY; without even the
* implied warranty  of MERCHANTABILITY or FITNESS  FOR A
* PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
* 
**/
package br.usp.poli.lta.cereda.aa.model;

import java.util.ArrayDeque;
import java.util.Deque;
import org.apache.commons.lang3.StringUtils;

/**
 * Define a estrutura de dados de pilha para ser utilizada pelo autmato
 * adaptativo. A pilha, neste caso, permite apenas a manipulao de elementos
 * que esto no topo.
 * @author Paulo Roberto Massa Cereda
 * @version 1.0
 * @since 1.0
 */
public class Stack {

    // atributo da classe, que  a pilha
    private final Deque<State> stack;

    /**
     * Construtor. Inicializa a pilha.
     */
    public Stack() {
        stack = new ArrayDeque<>();
    }

    /**
     * Adiciona o estado informado no topo da pilha.
     * @param entry Estado a ser adicionado no topo da pilha.
     */
    public void push(State entry) {
        stack.addFirst(entry);
    }

    /**
     * Remove o estado do topo da pilha e o retorna.
     * @return Estado que estava no topo da pilha.
     */
    public State pop() {
        State result = stack.getFirst();
        stack.removeFirst();
        return result;
    }

    /**
     * Retorna o estado que est no topo da pilha, sem, entretanto, remov-lo.
     * @return Estado que est no topo da pilha.
     */
    public State top() {
        return stack.getFirst();
    }

    /**
     * Verifica se a pilha est vazia.
     * @return Valor lgico que informa se a pilha est vazia.
     */
    public boolean isEmpty() {
        return stack.isEmpty();
    }

    /**
     * Limpa a pilha, removendo todos os elementos existentes.
     */
    public void clear() {
        stack.clear();
    }

    /**
     * Retorna uma representao textual da pilha.
     * @param separator Separador dos elementos.
     * @return Representao textual da pilha.
     */
    private String printElements(String separator) {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        sb.append(StringUtils.join(stack, separator));
        sb.append("]");
        return sb.toString();
    }

    /**
     * Retorna uma representao textual da pilha.
     * @return Representao textual da pilha.
     */
    @Override
    public String toString() {
        String div = " :: ";
        StringBuilder sb = new StringBuilder();
        sb.append("Pilha: { ");
        sb.append("A pilha est vazia? ").append(printAnswer(isEmpty()));
        if (!isEmpty()) {
            sb.append(div).append("Elementos (topo  esquerda): ");
            sb.append(printElements(div));
        }
        sb.append(" }");
        return sb.toString();
    }

    /**
     * Retorna uma representao textual do valor lgico informado.
     * @param value Valor lgico.
     * @return Representao textual do valor lgico.
     */
    private String printAnswer(boolean value) {
        String yes = "sim";
        String no = "no";
        return (value ? yes : no);
    }

}