use of de.neemann.digital.analyse.expression.ExpressionException in project Digital by hneemann.
the class TableDialog method createFileMenu.
private JMenu createFileMenu() {
JMenu fileMenu = new JMenu(Lang.get("menu_file"));
fileMenu.add(new ToolTipAction(Lang.get("menu_open")) {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fc = new MyFileChooser();
if (TableDialog.this.filename != null)
fc.setSelectedFile(SaveAsHelper.checkSuffix(TableDialog.this.filename, "tru"));
if (fc.showOpenDialog(TableDialog.this) == JFileChooser.APPROVE_OPTION) {
try {
File file = fc.getSelectedFile();
TruthTable truthTable = TruthTable.readFromFile(file);
setModel(new TruthTableTableModel(truthTable));
TableDialog.this.filename = file;
} catch (IOException e1) {
new ErrorMessage().addCause(e1).show(TableDialog.this);
}
}
}
});
fileMenu.add(new ToolTipAction(Lang.get("menu_save")) {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fc = new MyFileChooser();
if (TableDialog.this.filename != null)
fc.setSelectedFile(SaveAsHelper.checkSuffix(TableDialog.this.filename, "tru"));
new SaveAsHelper(TableDialog.this, fc, "tru").checkOverwrite(file -> {
model.getTable().save(file);
TableDialog.this.filename = file;
});
}
});
fileMenu.add(new ToolTipAction(Lang.get("menu_table_exportTableLaTeX")) {
@Override
public void actionPerformed(ActionEvent e) {
try {
ExpressionListener expressionListener = new LaTeXExpressionListener(model);
if (createJK.isSelected())
expressionListener = new ExpressionListenerJK(expressionListener);
lastGeneratedExpressions.replayTo(expressionListener);
} catch (ExpressionException | FormatterException e1) {
new ErrorMessage(Lang.get("msg_errorDuringCalculation")).addCause(e1).show(TableDialog.this);
}
}
});
fileMenu.add(new ToolTipAction(Lang.get("menu_table_exportHex")) {
@Override
public void actionPerformed(ActionEvent e) {
int res = JOptionPane.OK_OPTION;
if (model.getTable().getVars().size() > 20)
res = JOptionPane.showConfirmDialog(TableDialog.this, Lang.get("msg_tableHasManyRowsConfirm"));
if (res == JOptionPane.OK_OPTION) {
JFileChooser fc = new MyFileChooser();
if (TableDialog.this.filename != null)
fc.setSelectedFile(SaveAsHelper.checkSuffix(TableDialog.this.filename, "hex"));
new SaveAsHelper(TableDialog.this, fc, "hex").checkOverwrite(file -> model.getTable().saveHex(file));
}
}
}.setToolTip(Lang.get("menu_table_exportHex_tt")).createJMenuItem());
createJK = new JCheckBoxMenuItem(Lang.get("menu_table_JK"));
createJK.addActionListener(e -> calculateExpressions());
fileMenu.add(createJK);
return fileMenu;
}
use of de.neemann.digital.analyse.expression.ExpressionException in project Digital by hneemann.
the class ExpressionCreator method create.
/**
* Creates the expressions
*
* @param listener the listener to report the found expressions to
* @throws ExpressionException ExpressionException
* @throws FormatterException FormatterException
* @throws AnalyseException AnalyseException
*/
public void create(ExpressionListener listener) throws ExpressionException, FormatterException, AnalyseException {
final List<Variable> vars = Collections.unmodifiableList(theTable.getVars());
long time = System.currentTimeMillis();
if (theTable.getResultCount() > 100) {
ExecutorService ex = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
ThreadSaveExpressionListener threadListener = new ThreadSaveExpressionListener(listener);
for (int table = 0; table < theTable.getResultCount(); table++) {
final int t = table;
ex.submit(() -> {
try {
simplify(listener, vars, theTable.getResultName(t), theTable.getResult(t));
} catch (ExpressionException | FormatterException | AnalyseException e) {
e.printStackTrace();
}
});
}
ex.shutdown();
try {
ex.awaitTermination(100, TimeUnit.HOURS);
} catch (InterruptedException e) {
e.printStackTrace();
}
threadListener.close();
} else {
for (int table = 0; table < theTable.getResultCount(); table++) simplify(listener, vars, theTable.getResultName(table), theTable.getResult(table));
listener.close();
}
time = System.currentTimeMillis() - time;
LOGGER.debug("time: " + time / 1000.0 + " sec");
}
use of de.neemann.digital.analyse.expression.ExpressionException in project Digital by hneemann.
the class BruteForceGetAllTest method testFullRegression.
/**
* up to 3 variables we can calculate all tables possible!
*
* @throws ExpressionException
*/
public void testFullRegression() throws ExpressionException, FormatterException {
new FullVariantDontCareCreator() {
@Override
public void handleTable(int n, byte[] tab) throws ExpressionException {
performTestCalculation(n, tab);
}
}.create();
new FullVariantDontCareCreator(4, 241) {
@Override
public void handleTable(int n, byte[] tab) throws ExpressionException {
performTestCalculation(n, tab);
}
}.create();
}
use of de.neemann.digital.analyse.expression.ExpressionException in project Digital by hneemann.
the class ReorderInputs method reorder.
/**
* Creates a new table matching the actual state of the items
*
* @return the new table
* @throws ExpressionException ExpressionException
*/
public TruthTable reorder() throws ExpressionException {
ArrayList<Variable> newVars = new ArrayList<>();
ArrayList<Variable> deletedVars = new ArrayList<>();
deletedVars.addAll(table.getVars());
for (String name : names) {
Variable found = null;
for (Variable v : deletedVars) if (v.getIdentifier().equals(name)) {
found = v;
break;
}
if (found != null) {
newVars.add(found);
deletedVars.remove(found);
}
}
if (newVars.size() < 2)
throw new ExpressionException(Lang.get("err_tableBecomesToSmall"));
TruthTable newTable = new TruthTable(newVars);
for (int j = 0; j < table.getResultCount(); j++) newTable.addResult(table.getResultName(j));
ContextFiller fc = new ContextFiller(newTable.getVars());
for (Variable v : deletedVars) fc.set(v, false);
for (int row = 0; row < newTable.getRows(); row++) {
fc.setContextTo(row);
for (int t = 0; t < newTable.getResultCount(); t++) newTable.setByContext(t, fc, table.getByContext(t, fc));
}
return newTable;
}
use of de.neemann.digital.analyse.expression.ExpressionException in project Digital by hneemann.
the class TableDialog method createCircuit.
private void createCircuit(boolean useJKff, ExpressionModifier... modifier) {
try {
CircuitBuilder circuitBuilder = new CircuitBuilder(shapeFactory, useJKff, model.getTable().getVars()).setModelAnalyzerInfo(model.getTable().getModelAnalyzerInfo());
new BuilderExpressionCreator(circuitBuilder, modifier).setUseJKOptimizer(useJKff).create(lastGeneratedExpressions);
Circuit circuit = circuitBuilder.createCircuit();
new Main.MainBuilder().setParent(TableDialog.this).setLibrary(library).setCircuit(circuit).setBaseFileName(filename).openLater();
} catch (ExpressionException | FormatterException | RuntimeException e) {
new ErrorMessage(Lang.get("msg_errorDuringCalculation")).addCause(e).show(this);
}
}
Aggregations