package de.gaalop.tba;
import de.gaalop.ConfigurationProperty;
import de.gaalop.ConfigurationProperty.Type;
import de.gaalop.Notifications;
import java.awt.Image;
import java.util.Observable;
import de.gaalop.OptimizationStrategy;
import de.gaalop.OptimizationStrategyPlugin;
import de.gaalop.tba.cfgImport.optimization.maxima.ProcessBuilderMaximaConnection;
/**
* Implements the Table Based Approach as an OptimizationStrategyPlugin
* for using in Gaalop
*
* @author Christian Steinmetz
*/
public class Plugin extends Observable implements OptimizationStrategyPlugin {
@ConfigurationProperty(type = Type.BOOLEAN)
public boolean optOneExpressionRemoval = true;
@ConfigurationProperty(type = Type.BOOLEAN)
public boolean optConstantPropagation = true;
@ConfigurationProperty(type = Type.BOOLEAN)
public boolean optUnusedAssignments = true;
@ConfigurationProperty(type = Type.BOOLEAN)
public boolean optInserting = true;
public boolean invertTransformation = true;
public boolean scalarFunctions = true;
public boolean maximaExpand = false;
@ConfigurationProperty(type = Type.BOOLEAN)
public boolean doRoundingAfterOptimization = false;
@ConfigurationProperty(type = Type.NUMBER)
public int numberOfRoundingDigits = 6;
public boolean isOptConstantPropagation() {
return optConstantPropagation;
}
public boolean isOptOneExpressionRemoval() {
return optOneExpressionRemoval;
}
public boolean isOptUnusedAssignments() {
return optUnusedAssignments;
}
public boolean isOptInserting() {
return optInserting;
}
public boolean isScalarFunctions() {
return scalarFunctions;
}
public boolean isInvertTransformation() {
return invertTransformation;
}
public boolean isMaximaExpand() {
return maximaExpand;
}
public void setOptConstantPropagation(boolean optConstantPropagation) {
this.optConstantPropagation = optConstantPropagation;
}
public void setOptOneExpressionRemoval(boolean optOneExpressionRemoval) {
this.optOneExpressionRemoval = optOneExpressionRemoval;
}
public void setOptUnusedAssignments(boolean optUnusedAssignments) {
this.optUnusedAssignments = optUnusedAssignments;
}
public void setOptInserting(boolean optInserting) {
this.optInserting = optInserting;
}
public void setScalarFunctions(boolean scalarFunctions) {
this.scalarFunctions = scalarFunctions;
}
public void setInvertTransformation(boolean invertTransformation) {
this.invertTransformation = invertTransformation;
}
public void setMaximaExpand(boolean maximaExpand) {
this.maximaExpand = maximaExpand;
}
public boolean isDoRoundingAfterOptimization() {
return doRoundingAfterOptimization;
}
public void setNumberOfRoundingDigits(int numberOfRoundingDigits) {
this.numberOfRoundingDigits = numberOfRoundingDigits;
}
public int getNumberOfRoundingDigits() {
return numberOfRoundingDigits;
}
public void setDoRoundingAfterOptimization(boolean doRoundingAfterOptimization) {
this.doRoundingAfterOptimization = doRoundingAfterOptimization;
}
@Override
public String getDescription() {
return "This plugin uses a table based approach to optimize Geometric Algebra";
}
@Override
public Image getIcon() {
return null;
}
@Override
public String getName() {
return "Table-Based Approach";
}
@Override
public OptimizationStrategy createOptimizationStrategy() {
return new TBAOptStrategy(this);
}
void notifyError(Throwable error) {
setChanged();
notifyObservers(new Notifications.Error(error));
}
}