From 8465a2d918af15c6ca7e07427cea9025144e5649 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Sat, 5 Aug 2017 13:26:29 -0700 Subject: [PATCH 01/11] Remove old stopping code. --- .../org/nwapw/abacus/fx/AbacusController.java | 86 ++++--------------- .../nwapw/abacus/plugin/StandardPlugin.java | 78 +++-------------- .../org/nwapw/abacus/tree/BinaryNode.java | 7 +- .../org/nwapw/abacus/tree/FunctionNode.java | 9 +- .../java/org/nwapw/abacus/tree/UnaryNode.java | 7 +- src/main/resources/abacus.fxml | 2 - 6 files changed, 33 insertions(+), 156 deletions(-) diff --git a/src/main/java/org/nwapw/abacus/fx/AbacusController.java b/src/main/java/org/nwapw/abacus/fx/AbacusController.java index 85846a4..91e4fc5 100644 --- a/src/main/java/org/nwapw/abacus/fx/AbacusController.java +++ b/src/main/java/org/nwapw/abacus/fx/AbacusController.java @@ -1,6 +1,5 @@ package org.nwapw.abacus.fx; -import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; @@ -97,20 +96,6 @@ public class AbacusController implements PluginListener { * The abacus instance used for changing the plugin configuration. */ private Abacus abacus; - /** - * Thread used for calculating. - */ - private Thread calcThread; - - /** - * Checks whether the calculator is calculating. - */ - private boolean calculating; - - /** - * Seconds delayed for timer; - */ - private double delay = 0; /** * Boolean which represents whether changes were made to the configuration. @@ -187,63 +172,24 @@ public class AbacusController implements PluginListener { @FXML private void performCalculation() { - Runnable calculator = new Runnable() { - public void run() { - if (delay > 0) { - Runnable timer = new Runnable() { - public void run() { - long gap = (long) (delay * 1000); - long startTime = System.currentTimeMillis(); - while (System.currentTimeMillis() - startTime <= gap) { - } - stopCalculation(); - } - }; - Thread maxTime = new Thread(timer); - maxTime.setName("maxTime"); - maxTime.start(); - } - calculating = true; - Platform.runLater(() -> inputButton.setDisable(true)); - TreeNode constructedTree = abacus.parseString(inputField.getText()); - if (constructedTree == null) { - Platform.runLater(() -> outputText.setText(ERR_SYNTAX)); - Platform.runLater(() -> inputButton.setDisable(false)); - //return; - } else { - NumberInterface evaluatedNumber = abacus.evaluateTree(constructedTree); - if (evaluatedNumber == null) { - if (Thread.currentThread().isInterrupted()) { - Platform.runLater(() -> outputText.setText(ERR_STOP)); - Platform.runLater(() -> inputButton.setDisable(false)); - } else { - Platform.runLater(() -> outputText.setText(ERR_EVAL)); - Platform.runLater(() -> inputButton.setDisable(false)); - //return; - } - } else { - Platform.runLater(() -> outputText.setText(evaluatedNumber.toString())); - historyData.add(new HistoryModel(inputField.getText(), constructedTree.toString(), evaluatedNumber.toString())); - - Platform.runLater(() -> inputButton.setDisable(false)); - Platform.runLater(() -> inputField.setText("")); - } - } - calculating = false; - } - }; - if (!calculating) { - calcThread = new Thread(calculator); - calcThread.setName("calcThread"); - calcThread.start(); + inputButton.setDisable(true); + TreeNode constructedTree = abacus.parseString(inputField.getText()); + if (constructedTree == null) { + outputText.setText(ERR_SYNTAX); + inputButton.setDisable(false); + return; } - } + NumberInterface evaluatedNumber = abacus.evaluateTree(constructedTree); + if (evaluatedNumber == null) { + outputText.setText(ERR_EVAL); + inputButton.setDisable(false); + return; + } + outputText.setText(evaluatedNumber.toString()); + historyData.add(new HistoryModel(inputField.getText(), constructedTree.toString(), evaluatedNumber.toString())); - @FXML - private void stopCalculation() { - calcThread.interrupt(); - calculating = false; - //Platform.runLater(() ->inputButton.setDisable(false)); + inputButton.setDisable(false); + inputField.setText(""); } @FXML diff --git a/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java b/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java index e82ca2e..95b33ec 100755 --- a/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java +++ b/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java @@ -29,13 +29,9 @@ public class StandardPlugin extends Plugin { @Override protected NumberInterface applyInternal(NumberInterface[] params) { - if (Thread.currentThread().isInterrupted()) - return null; NumberInterface sum = params[0]; for (int i = 1; i < params.length; i++) { sum = sum.add(params[i]); - if (Thread.currentThread().isInterrupted()) - return null; } return sum; } @@ -51,8 +47,6 @@ public class StandardPlugin extends Plugin { @Override protected NumberInterface applyInternal(NumberInterface[] params) { - if (Thread.currentThread().isInterrupted()) - return null; return params[0].subtract(params[1]); } @@ -68,8 +62,6 @@ public class StandardPlugin extends Plugin { @Override protected NumberInterface applyInternal(NumberInterface[] params) { - if (Thread.currentThread().isInterrupted()) - return null; return params[0].negate(); } }); @@ -84,13 +76,9 @@ public class StandardPlugin extends Plugin { @Override protected NumberInterface applyInternal(NumberInterface[] params) { - if (Thread.currentThread().isInterrupted()) - return null; NumberInterface product = params[0]; for (int i = 1; i < params.length; i++) { product = product.multiply(params[i]); - if (Thread.currentThread().isInterrupted()) - return null; } return product; } @@ -106,8 +94,6 @@ public class StandardPlugin extends Plugin { @Override protected NumberInterface applyInternal(NumberInterface[] params) { - if (Thread.currentThread().isInterrupted()) - return null; return params[0].divide(params[1]); } }); @@ -125,19 +111,15 @@ public class StandardPlugin extends Plugin { @Override protected NumberInterface applyInternal(NumberInterface[] params) { - if (Thread.currentThread().isInterrupted()) - return null; if (params[0].signum() == 0) { return (new NaiveNumber(1)).promoteTo(params[0].getClass()); } NumberInterface factorial = params[0]; NumberInterface multiplier = params[0]; //It is necessary to later prevent calls of factorial on anything but non-negative integers. - while (!Thread.currentThread().isInterrupted() && (multiplier = multiplier.subtract(NaiveNumber.ONE.promoteTo(multiplier.getClass()))) != null && multiplier.signum() == 1) { + while ((multiplier = multiplier.subtract(NaiveNumber.ONE.promoteTo(multiplier.getClass()))).signum() == 1) { factorial = factorial.multiply(multiplier); } - if (Thread.currentThread().isInterrupted()) - return null; return factorial; /*if(!storedList.containsKey(params[0].getClass())){ storedList.put(params[0].getClass(), new ArrayList()); @@ -157,8 +139,6 @@ public class StandardPlugin extends Plugin { @Override protected NumberInterface applyInternal(NumberInterface[] params) { - if (Thread.currentThread().isInterrupted()) - return null; return params[0].multiply((new NaiveNumber(params[0].signum())).promoteTo(params[0].getClass())); } }; @@ -173,32 +153,26 @@ public class StandardPlugin extends Plugin { @Override protected NumberInterface applyInternal(NumberInterface[] params) { - if (Thread.currentThread().isInterrupted()) - return null; NumberInterface param = params[0]; int powersOf2 = 0; - NumberInterface check; - while (!Thread.currentThread().isInterrupted() && (check = FUNCTION_ABS.apply(param.subtract(NaiveNumber.ONE.promoteTo(param.getClass())))) != null && (check.compareTo((new NaiveNumber(0.1)).promoteTo(param.getClass()))) >= 0) { - if ((check = param.subtract(NaiveNumber.ONE.promoteTo(param.getClass()))) != null && check.signum() == 1) { + while (FUNCTION_ABS.apply(param.subtract(NaiveNumber.ONE.promoteTo(param.getClass()))).compareTo(new NaiveNumber(0.1).promoteTo(param.getClass())) >= 0) { + if (param.subtract(NaiveNumber.ONE.promoteTo(param.getClass())).signum() == 1) { param = param.divide(new NaiveNumber(2).promoteTo(param.getClass())); powersOf2++; - if ((check = param.subtract(NaiveNumber.ONE.promoteTo(param.getClass()))) == null || check.signum() != 1) { + if (param.subtract(NaiveNumber.ONE.promoteTo(param.getClass())).signum() != 1) { break; //No infinite loop for you. } } else { param = param.multiply(new NaiveNumber(2).promoteTo(param.getClass())); powersOf2--; - if ((check = param.subtract(NaiveNumber.ONE.promoteTo(param.getClass()))) == null || check.signum() != 1) { + if (param.subtract(NaiveNumber.ONE.promoteTo(param.getClass())).signum() != 1) { break; //No infinite loop for you. } } } - NumberInterface check2; - if (!Thread.currentThread().isInterrupted() && (check = getLog2(param)) != null && (check = check.multiply((new NaiveNumber(powersOf2).promoteTo(param.getClass())))) != null && (check2 = getLogPartialSum(param)) != null && (check = check.add(check2)) != null) - return check; - return null; + return getLog2(param).multiply((new NaiveNumber(powersOf2)).promoteTo(param.getClass())).add(getLogPartialSum(param)); } /** @@ -209,22 +183,16 @@ public class StandardPlugin extends Plugin { */ private NumberInterface getLogPartialSum(NumberInterface x) { - if (Thread.currentThread().isInterrupted()) - return null; NumberInterface maxError = getMaxError(x); x = x.subtract(NaiveNumber.ONE.promoteTo(x.getClass())); //Terms used are for log(x+1). NumberInterface currentNumerator = x, currentTerm = x, sum = x; int n = 1; - NumberInterface check; - while (!Thread.currentThread().isInterrupted() && (check = FUNCTION_ABS.apply(currentTerm)) != null && check.compareTo(maxError) > 0) { + while (FUNCTION_ABS.apply(currentTerm).compareTo(maxError) > 0) { n++; - if ((currentNumerator = currentNumerator.multiply(x)) == null || (currentNumerator = currentNumerator.negate()) == null) - return null; + currentNumerator = currentNumerator.multiply(x).negate(); currentTerm = currentNumerator.divide(new NaiveNumber(n).promoteTo(x.getClass())); sum = sum.add(currentTerm); } - if (Thread.currentThread().isInterrupted()) - return null; return sum; } @@ -234,8 +202,6 @@ public class StandardPlugin extends Plugin { * @return the value of log(2) with the appropriate precision. */ private NumberInterface getLog2(NumberInterface number) { - if (Thread.currentThread().isInterrupted()) - return null; NumberInterface maxError = getMaxError(number); //NumberInterface errorBound = (new NaiveNumber(1)).promoteTo(number.getClass()); //We'll use the series \sigma_{n >= 1) ((1/3^n + 1/4^n) * 1/n) @@ -244,17 +210,13 @@ public class StandardPlugin extends Plugin { NumberInterface a = (new NaiveNumber(1)).promoteTo(number.getClass()), b = a, c = a; NumberInterface sum = NaiveNumber.ZERO.promoteTo(number.getClass()); int n = 0; - while (!Thread.currentThread().isInterrupted() && a.compareTo(maxError) >= 1) { + while (a.compareTo(maxError) >= 1) { n++; a = a.divide((new NaiveNumber(3)).promoteTo(number.getClass())); b = b.divide((new NaiveNumber(4)).promoteTo(number.getClass())); c = NaiveNumber.ONE.promoteTo(number.getClass()).divide((new NaiveNumber(n)).promoteTo(number.getClass())); - NumberInterface check; - if (a == null || (check = a.add(b)) == null || (check = check.multiply(c)) == null || (sum = sum.add(check)) == null) - return null; + sum = sum.add(a.add(b).multiply(c)); } - if (Thread.currentThread().isInterrupted()) - return null; return sum; } }; @@ -378,15 +340,11 @@ public class StandardPlugin extends Plugin { @Override protected NumberInterface applyInternal(NumberInterface[] params) { - if (Thread.currentThread().isInterrupted()) return null; - else if (params[0].compareTo(NaiveNumber.ZERO.promoteTo(params[0].getClass())) == 0) + if (params[0].compareTo(NaiveNumber.ZERO.promoteTo(params[0].getClass())) == 0) return NaiveNumber.ZERO.promoteTo(params[0].getClass()); else if (params[1].compareTo(NaiveNumber.ZERO.promoteTo(params[0].getClass())) == 0) return NaiveNumber.ONE.promoteTo(params[1].getClass()); - FUNCTION_EXP.apply(FUNCTION_LN.apply(FUNCTION_ABS.apply(params[0])).multiply(params[1])); - NumberInterface check = FUNCTION_LN.apply(FUNCTION_ABS.apply(params[0])); - if(check == null) return null; - return FUNCTION_EXP.apply(check.multiply(params[1])); + return FUNCTION_EXP.apply(FUNCTION_LN.apply(FUNCTION_ABS.apply(params[0])).multiply(params[1])); } }); /** @@ -524,8 +482,6 @@ public class StandardPlugin extends Plugin { * @return a number of numClass with value n factorial. */ public static NumberInterface factorial(Class numberClass, int n) { - if (Thread.currentThread().isInterrupted()) - return null; if (!FACTORIAL_LISTS.containsKey(numberClass)) { FACTORIAL_LISTS.put(numberClass, new ArrayList<>()); FACTORIAL_LISTS.get(numberClass).add(NaiveNumber.ONE.promoteTo(numberClass)); @@ -533,12 +489,10 @@ public class StandardPlugin extends Plugin { } ArrayList list = FACTORIAL_LISTS.get(numberClass); if (n >= list.size()) { - while (!Thread.currentThread().isInterrupted() && list.size() < n + 16) { + while (list.size() < n + 16) { list.add(list.get(list.size() - 1).multiply(new NaiveNumber(list.size()).promoteTo(numberClass))); } } - if (Thread.currentThread().isInterrupted()) - return null; return list.get(n); } @@ -578,8 +532,6 @@ public class StandardPlugin extends Plugin { } public static NumberInterface intPow(NumberInterface number, Class numberClass, NumberInterface exponent) { - if (Thread.currentThread().isInterrupted()) - return null; if (exponent.compareTo((new NaiveNumber(0)).promoteTo(numberClass)) == 0) { return (new NaiveNumber(1)).promoteTo(numberClass); } @@ -588,14 +540,10 @@ public class StandardPlugin extends Plugin { NumberInterface power = number; for (NumberInterface currentExponent = (new NaiveNumber(1)).promoteTo(numberClass); currentExponent.compareTo(exponent) < 0; currentExponent = currentExponent.add((new NaiveNumber(1)).promoteTo(numberClass))) { power = power.multiply(number); - if (Thread.currentThread().isInterrupted()) - return null; } if (takeReciprocal) { power = (new NaiveNumber(1)).promoteTo(numberClass).divide(power); } - if (Thread.currentThread().isInterrupted()) - return null; return power; } diff --git a/src/main/java/org/nwapw/abacus/tree/BinaryNode.java b/src/main/java/org/nwapw/abacus/tree/BinaryNode.java index 0ae6acf..6ec7b80 100644 --- a/src/main/java/org/nwapw/abacus/tree/BinaryNode.java +++ b/src/main/java/org/nwapw/abacus/tree/BinaryNode.java @@ -92,15 +92,10 @@ public class BinaryNode extends TreeNode { @Override public T reduce(Reducer reducer) { - if (Thread.currentThread().isInterrupted()) - return null; T leftReduce = left.reduce(reducer); T rightReduce = right.reduce(reducer); if (leftReduce == null || rightReduce == null) return null; - T a = reducer.reduceNode(this, leftReduce, rightReduce); - if (Thread.currentThread().isInterrupted()) - return null; - return a; + return reducer.reduceNode(this, leftReduce, rightReduce); } @Override diff --git a/src/main/java/org/nwapw/abacus/tree/FunctionNode.java b/src/main/java/org/nwapw/abacus/tree/FunctionNode.java index 0f939c8..a0ee26e 100644 --- a/src/main/java/org/nwapw/abacus/tree/FunctionNode.java +++ b/src/main/java/org/nwapw/abacus/tree/FunctionNode.java @@ -62,17 +62,12 @@ public class FunctionNode extends TreeNode { @Override public T reduce(Reducer reducer) { - if (Thread.currentThread().isInterrupted()) - return null; Object[] reducedChildren = new Object[children.size()]; for (int i = 0; i < reducedChildren.length; i++) { reducedChildren[i] = children.get(i).reduce(reducer); - if (Thread.currentThread().isInterrupted() || reducedChildren[i] == null) return null; + if (reducedChildren[i] == null) return null; } - T a = reducer.reduceNode(this, reducedChildren); - if (Thread.currentThread().isInterrupted()) - return null; - return a; + return reducer.reduceNode(this, reducedChildren); } @Override diff --git a/src/main/java/org/nwapw/abacus/tree/UnaryNode.java b/src/main/java/org/nwapw/abacus/tree/UnaryNode.java index 7956169..298d25d 100644 --- a/src/main/java/org/nwapw/abacus/tree/UnaryNode.java +++ b/src/main/java/org/nwapw/abacus/tree/UnaryNode.java @@ -33,14 +33,9 @@ public class UnaryNode extends TreeNode { @Override public T reduce(Reducer reducer) { - if (Thread.currentThread().isInterrupted()) - return null; Object reducedChild = applyTo.reduce(reducer); if (reducedChild == null) return null; - T a = reducer.reduceNode(this, reducedChild); - if (Thread.currentThread().isInterrupted()) - return null; - return a; + return reducer.reduceNode(this, reducedChild); } /** diff --git a/src/main/resources/abacus.fxml b/src/main/resources/abacus.fxml index 11ae276..d3f3cc6 100644 --- a/src/main/resources/abacus.fxml +++ b/src/main/resources/abacus.fxml @@ -34,8 +34,6 @@