CommonLibraryEnabler.java
package edu.udel.cis.vsl.civl.library;
import java.io.PrintStream;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import edu.udel.cis.vsl.civl.kripke.Enabler;
import edu.udel.cis.vsl.civl.library.IF.LibraryEnabler;
import edu.udel.cis.vsl.civl.model.IF.CIVLSource;
import edu.udel.cis.vsl.civl.model.IF.ModelFactory;
import edu.udel.cis.vsl.civl.model.IF.expression.SystemGuardExpression;
import edu.udel.cis.vsl.civl.model.IF.statement.CallOrSpawnStatement;
import edu.udel.cis.vsl.civl.semantics.Evaluation;
import edu.udel.cis.vsl.civl.semantics.IF.Evaluator;
import edu.udel.cis.vsl.civl.state.IF.State;
import edu.udel.cis.vsl.civl.state.IF.StateFactory;
import edu.udel.cis.vsl.sarl.IF.SymbolicUniverse;
import edu.udel.cis.vsl.sarl.IF.expr.NumericExpression;
import edu.udel.cis.vsl.sarl.IF.expr.SymbolicExpression;
import edu.udel.cis.vsl.sarl.IF.object.IntObject;
/**
* This class implements the common logic of library enablers.
*
* @author Manchun Zheng (zmanchun)
*
*/
public abstract class CommonLibraryEnabler extends Library implements
LibraryEnabler {
/* *************************** Instance Fields ************************* */
/**
* The evaluator for evaluating expressions.
*/
protected Evaluator evaluator;
/**
* The model factory of the system.
*/
protected ModelFactory modelFactory;
/**
* The symbolic expression of one.
*/
protected NumericExpression one;
/**
* The symbolic object of integer one.
*/
protected IntObject oneObject;
/**
* The output stream to be used for printing.
*/
protected PrintStream output = System.out;
/**
* The enabler for normal CIVL execution.
*/
protected Enabler primaryEnabler;
/**
* The state factory for state-related computation.
*/
protected StateFactory stateFactory;
/**
* The symbolic universe for symbolic computations.
*/
protected SymbolicUniverse universe;
/**
* The symbolic expression of zero.
*/
protected NumericExpression zero;
/**
* The symbolic object of integer zero.
*/
protected IntObject zeroObject;
/* ***************************** Constructor *************************** */
/**
* Creates a new instance of library enabler.
*
* @param primaryEnabler
* The enabler for normal CIVL execution.
* @param output
* The output stream to be used in the enabler.
* @param modelFactory
* The model factory of the system.
*/
protected CommonLibraryEnabler(Enabler primaryEnabler, PrintStream output,
ModelFactory modelFactory) {
this.primaryEnabler = primaryEnabler;
this.evaluator = primaryEnabler.evaluator();
this.universe = evaluator.universe();
this.stateFactory = evaluator.stateFactory();
this.zero = universe.zeroInt();
this.one = universe.oneInt();
this.zeroObject = universe.intObject(0);
this.oneObject = universe.intObject(1);
this.output = output;
this.modelFactory = modelFactory;
}
/* ********************* Methods from LibraryEnabler ******************* */
@Override
public Evaluation evaluateGuard(CIVLSource source, State state, int pid,
SystemGuardExpression systemGuard) {
return new Evaluation(state, universe.trueExpression());
}
@Override
public Set<Integer> ampleSet(State state, int pid,
CallOrSpawnStatement statement,
Map<Integer, Map<SymbolicExpression, Boolean>> reachableMemUnitsMap) {
return new HashSet<>();
}
}