package hu.sztaki.ilab.longneck.process.block;
import java.util.ArrayList;
import java.util.List;
/**
* Base class for multiple case branching control structures.
*
* @author Molnár Péter <molnarp@sztaki.mta.hu>
*/
abstract public class AbstractSwitch extends Sequence {
/** List of cases. */
protected List<Case> cases;
public AbstractSwitch() {
cases = new ArrayList<Case>();
blocks = cases;
}
public List<Case> getCases() {
return cases;
}
public void setCases(List<Case> cases) {
this.blocks = cases;
this.cases = cases;
}
@Override
public List<Block> getBlocks() {
return (List<Block>) blocks;
}
@Override
public boolean hasPosition(int pos) {
if (cases == null) {
return false;
}
return (pos >= 0 && pos < cases.size());
}
@Override
public AbstractSwitch clone() {
AbstractSwitch copy = (AbstractSwitch) super.clone();
if (cases != null) {
copy.cases = new ArrayList<Case>(cases.size());
copy.blocks = copy.cases;
for (final Case c : cases) {
Case cloneCase = c.clone();
copy.cases.add(cloneCase);
}
}
return copy;
}
}