All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.fge.grappa.stack.ValueStack Maven / Gradle / Ivy

/*
 * Copyright (C) 2009-2011 Mathias Doenitz
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.github.fge.grappa.stack;

import javax.annotation.Nonnull;
import javax.annotation.ParametersAreNonnullByDefault;

/**
 * Stack implementation for use in parsers
 *
 * 

A stack state can be saved and restored using {@link #takeSnapshot()} and * {@link #restoreSnapshot(Object)}.

* *

Stacks do not accept null values; if a null value is inserted, a {@link * NullPointerException} will be thrown.

* *

Any attempt to pop/swap values on a stack with not enough elements will * throw an {@link IllegalStateException}.

* *

You probably want to extend {@link ValueStackBase} instead of directly * implementing this interface.

* * @param the type of the value objects */ @ParametersAreNonnullByDefault public interface ValueStack extends Iterable { /** * Determines whether the stack is empty. * * @return true if empty */ boolean isEmpty(); /** * Returns the number of elements currently on the stack. * * @return the number of elements */ int size(); /** * Clears all values. */ void clear(); /** * Returns an object representing the current state of the stack. * * @return an object representing the current state of the stack */ @Nonnull Object takeSnapshot(); /** * Restores the stack state as previously returned by {@link * #takeSnapshot()}. * * @param snapshot a snapshot object previously returned by {@link * #takeSnapshot()} */ void restoreSnapshot(Object snapshot); /** * Pushes the given value onto the stack. Equivalent to push(0, value). * * @param value the value */ void push(V value); /** * Inserts the given value a given number of elements below the current top * of the stack. * * @param down the number of elements to skip before inserting the value (0 * being equivalent to push(value)) * @param value the value */ void push(int down, V value); /** * Removes the value at the top of the stack and returns it. * * @return the current top value */ @Nonnull V pop(); /** * Removes the value the given number of elements below the top of the stack. * * @param down the number of elements to skip before removing the value (0 * being equivalent to pop()) * @return the value */ @Nonnull V pop(int down); /** * Removes and casts the value at the top of the stack, and returns it * * @param type the type to cast to * @param type parameter * @return the value */ @Nonnull T popAs(Class type); /** * Removes and casts the value at a given index in the stack, and returns it * * @param type the type to cast to * @param down the index * @param type parameter * @return the value */ @Nonnull T popAs(Class type, int down); /** * Returns the value at the top of the stack without removing it. * * @return the current top value */ @Nonnull V peek(); /** * Returns the value the given number of elements below the top of the stack * without removing it. * * @param down the number of elements to skip (0 being equivalent to peek()) * @return the value */ @Nonnull V peek(int down); /** * Casts and returns the value at the top of the stack without removing it * * @param type the type to cast to * @param type parameter * @return the value */ @Nonnull T peekAs(Class type); /** * Casts and returns the value at a given index in the stack without * removing it * * @param type the type to cast to * @param down the index in the stack * @param type parameter * @return the value */ @Nonnull T peekAs(Class type, int down); /** * Replaces the current top value with the given value. Equivalent to * poke(0, value). * * @param value the value */ void poke(@Nonnull V value); /** * Replaces the element the given number of elements below the current top * of the stack. * * @param down the number of elements to skip before replacing the value (0 * being equivalent to poke(value)) * @param value the value to replace with */ void poke(int down, V value); /** * Duplicates the top value. Equivalent to push(peek()). */ void dup(); /** * Reverses the order of the top n stack values * * @param n the number of elements to reverse */ void swap(int n); /** * Swaps the top two stack values. */ void swap(); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy