CommonTransitionSequence.java

package edu.udel.cis.vsl.civl.semantics.common;

import java.util.Collection;
import java.util.LinkedList;

import edu.udel.cis.vsl.civl.semantics.IF.Transition;
import edu.udel.cis.vsl.civl.semantics.IF.TransitionSequence;
import edu.udel.cis.vsl.civl.state.IF.State;

/**
 * A transition sequence contains a list of transitions and the state from which
 * they emanate.
 * 
 * @author Timothy K. Zirkel (zirkel)
 * @author Manchun Zheng (zmanchun)
 */
public class CommonTransitionSequence implements TransitionSequence {

	/* *************************** Instance Fields ************************* */

	/**
	 * All the transitions emanating from a certain state.
	 */
	private LinkedList<Transition> transitions;

	/**
	 * This is the state from which all the transitions in the sequence emanate.
	 */
	private State state;

	/**
	 * The number of elements removed from this sequence since it was created.
	 */
	private int numRemoved = 0;

	/* ***************************** Constructors ************************** */

	/**
	 * Create an empty transition sequence.
	 * 
	 * @param state
	 *            The state that all transitions of this sequence emanate from.
	 */
	public CommonTransitionSequence(State state) {
		this.state = state;
		this.transitions = new LinkedList<Transition>();
	}

	/* ******************* Methods from TransitionSequence ***************** */

	@Override
	public Transition remove() {
		Transition result = transitions.remove();

		numRemoved++;
		return result;
	}

	@Override
	public int numRemoved() {
		return numRemoved;
	}

	@Override
	public State state() {
		return state;
	}

	@Override
	public void addAll(Collection<Transition> transitions) {
		this.transitions.addAll(transitions);
	}

	@Override
	public int size() {
		return this.transitions.size();
	}

	@Override
	public boolean isEmpty() {
		return this.transitions.isEmpty();
	}

	@Override
	public Transition peek() {
		return this.transitions.peek();
	}

	/* ************************* Methods from Object *********************** */

	@Override
	public String toString() {
		StringBuffer result = new StringBuffer();

		result.append(state.toString());
		for (Transition transition : this.transitions) {
			result.append(":\n");
			result.append(transition.toString());
		}
		return result.toString();
	}
}