TransitionSequence.java

package edu.udel.cis.vsl.tass.transition.impl;

import edu.udel.cis.vsl.tass.state.IF.StateIF;
import edu.udel.cis.vsl.tass.transition.IF.TransitionIF;
import edu.udel.cis.vsl.tass.transition.IF.TransitionSequenceIF;

/**
 * Keeps a list 2 deep of transitions in the sequence. transition1: the next
 * element in the sequence. transition2: the one after that.
 * 
 * */
public class TransitionSequence implements TransitionSequenceIF {

	private StateIF state;
	private Transition transition1 = null, transition2 = null;
	private boolean full;
	private boolean isBufferedSend = false;
	private int index = -1;

	TransitionSequence(StateIF state, boolean full) {
		this.state = state;
		this.full = full;
	}

	@Override
	public void setBufferedSend(boolean value) {
		this.isBufferedSend = value;
	}

	@Override
	public boolean isBufferedSend() {
		return isBufferedSend;
	}

	@Override
	public void shift(TransitionIF transition) {
		transition1 = transition2;
		transition2 = (Transition) transition;
		if (transition1 == null) {
			index = -1;
		} else {
			index++;
		}
	}

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

	@Override
	public Transition peek() {
		return transition1;
	}

	@Override
	public Transition peek2() {
		return transition2;
	}

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

	@Override
	public boolean full() {
		return full;
	}

	@Override
	public boolean isMultiple() {
		return index >= 1 || (index == 0 && transition2 != null);
	}

	@Override
	public void prune() {
		transition2 = null;
	}
}