package jvstm.test.jwormbench;
import java.util.concurrent.Callable;
import jvstm.Transaction;
import jwormbench.core.AbstractStep;
import jwormbench.core.IStep;
import jwormbench.core.Direction;
import jwormbench.core.IOperation;
import jwormbench.core.IWorm;
public class JvstmStep extends AbstractStep{
public JvstmStep(Direction direction, IOperation<?> op) {
super(direction, op);
}
@Override
public Object performStep(final IWorm worm) {
Object res = null;
//
// Perform operation
//
try {
Callable<Object> task = new Callable<Object>() {
public Object call() throws Exception {
return op.performOperation(worm);
}
};
if(op.getKind().ordinal() < 5)
res = Transaction.doIt(task, true);
else
res = Transaction.doIt(task, false);
} catch (Exception e) {
throw new RuntimeException(e);
}
//
// Move worm
//
worm.move(direction);
worm.updateWorldUnderWorm();
return res;
}
}