CommonTransitionIterator.java
package edu.udel.cis.vsl.civl.semantics.common;
import java.util.LinkedList;
import java.util.NoSuchElementException;
import edu.udel.cis.vsl.civl.semantics.IF.Transition;
import edu.udel.cis.vsl.civl.semantics.IF.TransitionSet;
import edu.udel.cis.vsl.civl.state.IF.State;
import edu.udel.cis.vsl.gmc.TransitionIterator;
import edu.udel.cis.vsl.gmc.TransitionSetIF;
/**
* This class defines the regular transition iterator of {@link TransitionSetIF}
* , the iterator will iterate the {@link TransitionSetIF} in a fix order.
*
* @author Yihao Yan (yihaoyan)
*
*/
public class CommonTransitionIterator extends TransitionIterator<State, Transition> {
/**
* The source transition set.
*/
private TransitionSet transitionSet;
/**
* A list of indexes of the transition set.
*/
private LinkedList<Integer> indexes;
/**
* The number of transitions that have been consumed.
*/
private int numConsumed = 0;
/**
* <ul>
* <li>offSet = 0 when this iterator iterates an ample set;</li>
* <li>offSet = sizeof(ampleSet) when this iterator iterates an ample set
* complement;</li>
* </ul>
*/
private int offSet = 0;
public CommonTransitionIterator(TransitionSet transitionSet) {
this.transitionSet = transitionSet;
indexes = new LinkedList<>();
int size = transitionSet.size();
for (int i = 0; i < size; i++) {
indexes.add(i);
}
}
@Override
public TransitionSetIF<State, Transition> getTransitionSet() {
return transitionSet;
}
@Override
public Transition peek() {
if (indexes.size() == 0)
throw new NoSuchElementException();
return transitionSet.get(indexes.peek());
}
@Override
public boolean hasNext() {
return indexes.size() > 0;
}
@Override
public Transition next() {
if (indexes.size() == 0)
throw new NoSuchElementException();
numConsumed++;
return transitionSet.get(indexes.pop());
}
@Override
public int numConsumed() {
return numConsumed + offSet;
}
public void setOffSet(int offSet) {
this.offSet = offSet;
}
}