/**
*
*/
package eu.quanticol.carma.simulator;
/**
* @author loreti
*
*/
public interface CarmaPredicate {
public boolean satisfy( double now , CarmaStore store );
public static final CarmaPredicate TRUE = new CarmaPredicate() {
@Override
public boolean satisfy(double now , CarmaStore store) {
return true;
}
};
public static final CarmaPredicate FALSE = new CarmaPredicate() {
@Override
public boolean satisfy(double now, CarmaStore store) {
return false;
}
};
public static class HasValue<S> implements CarmaPredicate {
private String attribute;
private Class<S> clazz;
private S value;
public HasValue( String attribute , Class<S> clazz , S value ) {
this.attribute = attribute;
this.clazz = clazz;
this.value = value;
}
@Override
public boolean satisfy(double now, CarmaStore store) {
return value.equals(store.get(attribute, clazz));
}
}
public static class Conjunction implements CarmaPredicate {
private CarmaPredicate[] predicates;
public Conjunction( CarmaPredicate ... predicates ) {
this.predicates = predicates;
}
@Override
public boolean satisfy(double now, CarmaStore store) {
for (CarmaPredicate carmaPredicate : predicates) {
if (!carmaPredicate.satisfy(now,store)) {
return false;
}
}
return true;
}
}
}