From bc475a22f99c8c0524bddee01775eb4ddaa28e89 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Thu, 21 Sep 2017 10:18:29 -0700 Subject: [PATCH 1/8] Rewrite NumberInterface in Kotlin. --- .../nwapw/abacus/number/NumberInterface.kt} | 486 +++++++++--------- 1 file changed, 233 insertions(+), 253 deletions(-) rename core/src/main/{java/org/nwapw/abacus/number/NumberInterface.java => kotlin/org/nwapw/abacus/number/NumberInterface.kt} (64%) mode change 100755 => 100644 diff --git a/core/src/main/java/org/nwapw/abacus/number/NumberInterface.java b/core/src/main/kotlin/org/nwapw/abacus/number/NumberInterface.kt old mode 100755 new mode 100644 similarity index 64% rename from core/src/main/java/org/nwapw/abacus/number/NumberInterface.java rename to core/src/main/kotlin/org/nwapw/abacus/number/NumberInterface.kt index bcccddb..c3f4d90 --- a/core/src/main/java/org/nwapw/abacus/number/NumberInterface.java +++ b/core/src/main/kotlin/org/nwapw/abacus/number/NumberInterface.kt @@ -1,253 +1,233 @@ -package org.nwapw.abacus.number; - -import org.nwapw.abacus.exception.ComputationInterruptedException; - -/** - * An interface used to represent a number. - */ -public abstract class NumberInterface implements Comparable { - - /** - * Check if the thread was interrupted and - * throw an exception to end the computation. - */ - private static void checkInterrupted() { - if (Thread.currentThread().isInterrupted()) - throw new ComputationInterruptedException(); - } - - /** - * The maximum precision to which this number operates. - * - * @return the precision. - */ - public abstract int getMaxPrecision(); - - /** - * Multiplies this number by another, returning - * a new number instance. - * - * @param multiplier the multiplier - * @return the result of the multiplication. - */ - protected abstract NumberInterface multiplyInternal(NumberInterface multiplier); - - /** - * Multiplies this number by another, returning - * a new number instance. Also, checks if the - * thread has been interrupted, and if so, throws - * an exception. - * - * @param multiplier the multiplier - * @return the result of the multiplication. - */ - public final NumberInterface multiply(NumberInterface multiplier) { - checkInterrupted(); - return multiplyInternal(multiplier); - } - - /** - * Divides this number by another, returning - * a new number instance. - * - * @param divisor the divisor - * @return the result of the division. - */ - protected abstract NumberInterface divideInternal(NumberInterface divisor); - - /** - * Divides this number by another, returning - * a new number instance. Also, checks if the - * thread has been interrupted, and if so, throws - * an exception. - * - * @param divisor the divisor - * @return the result of the division. - */ - public final NumberInterface divide(NumberInterface divisor) { - checkInterrupted(); - return divideInternal(divisor); - } - - /** - * Adds this number to another, returning - * a new number instance. - * - * @param summand the summand - * @return the result of the summation. - */ - protected abstract NumberInterface addInternal(NumberInterface summand); - - /** - * Adds this number to another, returning - * a new number instance. Also, checks if the - * thread has been interrupted, and if so, throws - * an exception. - * - * @param summand the summand - * @return the result of the summation. - */ - public final NumberInterface add(NumberInterface summand) { - checkInterrupted(); - return addInternal(summand); - } - - /** - * Subtracts another number from this number, - * a new number instance. - * - * @param subtrahend the subtrahend. - * @return the result of the subtraction. - */ - protected abstract NumberInterface subtractInternal(NumberInterface subtrahend); - - /** - * Subtracts another number from this number, - * a new number instance. Also, checks if the - * thread has been interrupted, and if so, throws - * an exception. - * - * @param subtrahend the subtrahend. - * @return the result of the subtraction. - */ - public final NumberInterface subtract(NumberInterface subtrahend) { - checkInterrupted(); - return subtractInternal(subtrahend); - } - - /** - * Returns a new instance of this number with - * the sign flipped. - * - * @return the new instance. - */ - protected abstract NumberInterface negateInternal(); - - - /** - * Returns a new instance of this number with - * the sign flipped. Also, checks if the - * thread has been interrupted, and if so, throws - * an exception. - * - * @return the new instance. - */ - public final NumberInterface negate() { - checkInterrupted(); - return negateInternal(); - } - - /** - * Raises this number to an integer power. - * - * @param exponent the exponent to which to take the number. - * @return the resulting value. - */ - protected abstract NumberInterface intPowInternal(int exponent); - - /** - * Raises this number to an integer power. Also, checks if the - * thread has been interrupted, and if so, throws - * an exception. - * - * @param exponent the exponent to which to take the number. - * @return the resulting value. - */ - public final NumberInterface intPow(int exponent) { - checkInterrupted(); - return intPowInternal(exponent); - } - - /** - * Same as Math.signum(). - * - * @return 1 if this number is positive, -1 if this number is negative, 0 if this number is 0. - */ - public abstract int signum(); - - /** - * Returns the least integer greater than or equal to the number. - * - * @return the least integer greater or equal to the number, if int can hold the value. - */ - protected abstract NumberInterface ceilingInternal(); - - /** - * Returns the least integer greater than or equal to the number. - * Also, checks if the thread has been interrupted, and if so, throws - * an exception. - * - * @return the least integer bigger or equal to the number. - */ - public final NumberInterface ceiling() { - checkInterrupted(); - return ceilingInternal(); - } - - /** - * Return the greatest integer less than or equal to the number. - * - * @return the greatest integer smaller or equal the number. - */ - protected abstract NumberInterface floorInternal(); - - /** - * Return the greatest integer less than or equal to the number. - * Also, checks if the thread has been interrupted, and if so, throws - * an exception. - * - * @return the greatest int smaller than or equal to the number. - */ - public final NumberInterface floor() { - checkInterrupted(); - return floorInternal(); - } - - /** - * Returns the fractional part of the number. - * - * @return the fractional part of the number. - */ - protected abstract NumberInterface fractionalPartInternal(); - - /** - * Returns the fractional part of the number, specifically x - floor(x). - * Also, checks if the thread has been interrupted, - * and if so, throws an exception. - * - * @return the fractional part of the number. - */ - public final NumberInterface fractionalPart() { - checkInterrupted(); - return fractionalPartInternal(); - } - - /** - * Returns the integer representation of this number, discarding any fractional part, - * if int can hold the value. - * - * @return the integer value of this number. - */ - public abstract int intValue(); - - /** - * Returns the smallest error this instance can tolerate depending - * on its precision and value. - * - * @return the smallest error that should be permitted in calculations. - */ - public abstract NumberInterface getMaxError(); - - /** - * Returns a NumberRangeBuilder object, which is used to create a range. - * The reason that this returns a builder and not an actual range is that - * the NumberRange needs to promote values passed to it, which - * requires an abacus instance. - * @param other the value at the bottom of the range. - * @return the resulting range builder. - */ - public NumberRangeBuilder rangeTo(NumberInterface other){ - return new NumberRangeBuilder(this, other); - } - -} +package org.nwapw.abacus.number + +import org.nwapw.abacus.exception.ComputationInterruptedException + +abstract class NumberInterface: Comparable { + + /** + * Check if the thread was interrupted and + * throw an exception to end the computation. + */ + private fun checkInterrupted(){ + if(Thread.currentThread().isInterrupted) + throw ComputationInterruptedException() + } + + /** + * Returns the integer representation of this number, discarding any fractional part, + * if int can hold the value. + * + * @return the integer value of this number. + */ + abstract fun intValue(): Int + /** + * Same as Math.signum(). + * + * @return 1 if this number is positive, -1 if this number is negative, 0 if this number is 0. + */ + abstract fun signum(): Int + + /** + * The maximum precision to which this number operates. + */ + abstract val maxPrecision: Int + /** + * Returns the smallest error this instance can tolerate depending + * on its precision and value. + */ + abstract val maxError: NumberInterface + + /** + * Adds this number to another, returning + * a new number instance. + * + * @param summand the summand + * @return the result of the summation. + */ + abstract fun addInternal(summand: NumberInterface): NumberInterface + /** + * Subtracts another number from this number, + * a new number instance. + * + * @param subtrahend the subtrahend. + * @return the result of the subtraction. + */ + abstract fun subtractInternal(subtrahend: NumberInterface): NumberInterface + /** + * Multiplies this number by another, returning + * a new number instance. + * + * @param multiplier the multiplier + * @return the result of the multiplication. + */ + abstract fun multiplyInternal(multiplier: NumberInterface): NumberInterface + /** + * Divides this number by another, returning + * a new number instance. + * + * @param divisor the divisor + * @return the result of the division. + */ + abstract fun divideInternal(divisor: NumberInterface): NumberInterface + /** + * Returns a new instance of this number with + * the sign flipped. + * + * @return the new instance. + */ + abstract fun negateInternal(): NumberInterface + /** + * Raises this number to an integer power. + * + * @param exponent the exponent to which to take the number. + * @return the resulting value. + */ + abstract fun intPowInternal(pow: Int): NumberInterface + /** + * Returns the least integer greater than or equal to the number. + * + * @return the least integer greater or equal to the number, if int can hold the value. + */ + abstract fun ceilingInternal(): NumberInterface + /** + * Return the greatest integer less than or equal to the number. + * + * @return the greatest integer smaller or equal the number. + */ + abstract fun floorInternal(): NumberInterface + /** + * Returns the fractional part of the number. + * + * @return the fractional part of the number. + */ + abstract fun fractionalPartInternal(): NumberInterface + + /** + * Adds this number to another, returning + * a new number instance. Also, checks if the + * thread has been interrupted, and if so, throws + * an exception. + * + * @param summand the summand + * @return the result of the summation. + */ + fun add(summand: NumberInterface): NumberInterface { + checkInterrupted() + return addInternal(summand) + } + + /** + * Subtracts another number from this number, + * a new number instance. Also, checks if the + * thread has been interrupted, and if so, throws + * an exception. + * + * @param subtrahend the subtrahend. + * @return the result of the subtraction. + */ + fun subtract(subtrahend: NumberInterface): NumberInterface { + checkInterrupted() + return subtractInternal(subtrahend) + } + + /** + * Multiplies this number by another, returning + * a new number instance. Also, checks if the + * thread has been interrupted, and if so, throws + * an exception. + * + * @param multiplier the multiplier + * @return the result of the multiplication. + */ + fun multiply(multiplier: NumberInterface): NumberInterface { + checkInterrupted() + return multiplyInternal(multiplier) + } + + /** + * Divides this number by another, returning + * a new number instance. Also, checks if the + * thread has been interrupted, and if so, throws + * an exception. + * + * @param divisor the divisor + * @return the result of the division. + */ + fun divide(divisor: NumberInterface): NumberInterface { + checkInterrupted() + return divideInternal(divisor) + } + + /** + * Returns a new instance of this number with + * the sign flipped. Also, checks if the + * thread has been interrupted, and if so, throws + * an exception. + * + * @return the new instance. + */ + fun negate(): NumberInterface { + checkInterrupted() + return negateInternal() + } + + /** + * Raises this number to an integer power. Also, checks if the + * thread has been interrupted, and if so, throws + * an exception. + * + * @param exponent the exponent to which to take the number. + * @return the resulting value. + */ + fun intPow(exponent: Int): NumberInterface { + checkInterrupted() + return intPowInternal(exponent) + } + + /** + * Returns the least integer greater than or equal to the number. + * Also, checks if the thread has been interrupted, and if so, throws + * an exception. + * + * @return the least integer bigger or equal to the number. + */ + fun ceiling(): NumberInterface { + checkInterrupted() + return ceilingInternal() + } + + /** + * Return the greatest integer less than or equal to the number. + * Also, checks if the thread has been interrupted, and if so, throws + * an exception. + * + * @return the greatest int smaller than or equal to the number. + */ + fun floor(): NumberInterface { + checkInterrupted() + return floorInternal() + } + + /** + * Returns the fractional part of the number, specifically x - floor(x). + * Also, checks if the thread has been interrupted, + * and if so, throws an exception. + * + * @return the fractional part of the number. + */ + fun fractionalPart(): NumberInterface { + checkInterrupted() + return fractionalPartInternal() + } + + /** + * Returns a NumberRangeBuilder object, which is used to create a range. + * The reason that this returns a builder and not an actual range is that + * the NumberRange needs to promote values passed to it, which + * requires an abacus instance. + * @param other the value at the bottom of the range. + * @return the resulting range builder. + */ + operator fun rangeTo(other: NumberInterface) = NumberRangeBuilder(this, other) + +} \ No newline at end of file From 4fd8f7badf154efc562d614a8585a156fb6ebc2d Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Thu, 21 Sep 2017 13:25:05 -0700 Subject: [PATCH 2/8] Add operator overloading. --- .../nwapw/abacus/number/NumberInterface.kt | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/core/src/main/kotlin/org/nwapw/abacus/number/NumberInterface.kt b/core/src/main/kotlin/org/nwapw/abacus/number/NumberInterface.kt index c3f4d90..337969c 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/number/NumberInterface.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/number/NumberInterface.kt @@ -230,4 +230,39 @@ abstract class NumberInterface: Comparable { */ operator fun rangeTo(other: NumberInterface) = NumberRangeBuilder(this, other) + /** + * Plus operator overloaded to allow "nice" looking math. + * @param other the value to add to this number. + * @return the result of the addition. + */ + operator fun plus(other: NumberInterface) = add(other) + /** + * Minus operator overloaded to allow "nice" looking math. + * @param other the value to subtract to this number. + * @return the result of the subtraction. + */ + operator fun minus(other: NumberInterface) = subtract(other) + /** + * Times operator overloaded to allow "nice" looking math. + * @param other the value to multiply this number by. + * @return the result of the multiplication. + */ + operator fun times(other: NumberInterface) = multiply(other) + /** + * Divide operator overloaded to allow "nice" looking math. + * @param other the value to divide this number by. + * @return the result of the division. + */ + operator fun div(other: NumberInterface) = divide(other) + /** + * The plus operator. + * @return this number. + */ + operator fun unaryPlus() = this + /** + * The minus operator. + * @return the negative of this number. + */ + operator fun unaryMinus() = negate() + } \ No newline at end of file From 81d0999c1132a2a2b56eb351923585887ac62915 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Thu, 21 Sep 2017 13:39:38 -0700 Subject: [PATCH 3/8] Switch the basic operators into individual classes. --- .../nwapw/abacus/plugin/StandardPlugin.java | 53 +++---------------- .../abacus/plugin/standard/OperatorAdd.kt | 21 ++++++++ .../abacus/plugin/standard/OperatorDivide.kt | 21 ++++++++ .../plugin/standard/OperatorMultiply.kt | 21 ++++++++ .../plugin/standard/OperatorSubtract.kt | 21 ++++++++ 5 files changed, 92 insertions(+), 45 deletions(-) create mode 100644 core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorAdd.kt create mode 100644 core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorDivide.kt create mode 100644 core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorMultiply.kt create mode 100644 core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorSubtract.kt diff --git a/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java b/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java index 9d95303..db962ba 100755 --- a/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java +++ b/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java @@ -5,6 +5,10 @@ import org.nwapw.abacus.function.*; import org.nwapw.abacus.number.NaiveNumber; import org.nwapw.abacus.number.NumberInterface; import org.nwapw.abacus.number.PreciseNumber; +import org.nwapw.abacus.plugin.standard.OperatorAdd; +import org.nwapw.abacus.plugin.standard.OperatorDivide; +import org.nwapw.abacus.plugin.standard.OperatorMultiply; +import org.nwapw.abacus.plugin.standard.OperatorSubtract; import org.nwapw.abacus.tree.TreeNode; import org.nwapw.abacus.tree.VariableNode; @@ -53,32 +57,11 @@ public class StandardPlugin extends Plugin { /** * The addition operator, + */ - public static final NumberOperator OP_ADD = new NumberOperator(OperatorAssociativity.LEFT, OperatorType.BINARY_INFIX, 0) { - @Override - public boolean matchesParams(MutableEvaluationContext context, NumberInterface[] params) { - return params.length == 2; - } - - @Override - public NumberInterface applyInternal(MutableEvaluationContext context, NumberInterface[] params) { - return params[0].add(params[1]); - } - }; + public static final NumberOperator OP_ADD = new OperatorAdd(); /** * The subtraction operator, - */ - public static final NumberOperator OP_SUBTRACT = new NumberOperator(OperatorAssociativity.LEFT, OperatorType.BINARY_INFIX, 0) { - @Override - public boolean matchesParams(MutableEvaluationContext context, NumberInterface[] params) { - return params.length == 2; - } - - @Override - public NumberInterface applyInternal(MutableEvaluationContext context, NumberInterface[] params) { - return params[0].subtract(params[1]); - - } - }; + public static final NumberOperator OP_SUBTRACT = new OperatorSubtract(); /** * The negation operator, - */ @@ -96,17 +79,7 @@ public class StandardPlugin extends Plugin { /** * The multiplication operator, * */ - public static final NumberOperator OP_MULTIPLY = new NumberOperator(OperatorAssociativity.LEFT, OperatorType.BINARY_INFIX, 1) { - @Override - public boolean matchesParams(MutableEvaluationContext context, NumberInterface[] params) { - return params.length == 2; - } - - @Override - public NumberInterface applyInternal(MutableEvaluationContext context, NumberInterface[] params) { - return params[0].multiply(params[1]); - } - }; + public static final NumberOperator OP_MULTIPLY = new OperatorMultiply(); /** * The implementation for double-based naive numbers. */ @@ -161,17 +134,7 @@ public class StandardPlugin extends Plugin { /** * The division operator, / */ - public static final NumberOperator OP_DIVIDE = new NumberOperator(OperatorAssociativity.LEFT, OperatorType.BINARY_INFIX, 1) { - @Override - public boolean matchesParams(MutableEvaluationContext context, NumberInterface[] params) { - return params.length == 2 && params[1].compareTo(context.getInheritedNumberImplementation().instanceForString(Integer.toString(0))) != 0; - } - - @Override - public NumberInterface applyInternal(MutableEvaluationContext context, NumberInterface[] params) { - return params[0].divide(params[1]); - } - }; + public static final NumberOperator OP_DIVIDE = new OperatorDivide(); /** * The factorial operator, ! */ diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorAdd.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorAdd.kt new file mode 100644 index 0000000..0f1c7d4 --- /dev/null +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorAdd.kt @@ -0,0 +1,21 @@ +package org.nwapw.abacus.plugin.standard + +import org.nwapw.abacus.context.MutableEvaluationContext +import org.nwapw.abacus.function.NumberOperator +import org.nwapw.abacus.function.OperatorAssociativity +import org.nwapw.abacus.function.OperatorType +import org.nwapw.abacus.number.NumberInterface + +/** + * The addition operator. + * + * This is a standard operator that simply performs addition. + */ +class OperatorAdd: NumberOperator(OperatorAssociativity.LEFT, OperatorType.BINARY_INFIX, 0) { + + override fun matchesParams(context: MutableEvaluationContext, params: Array) = + params.size == 2 + override fun applyInternal(context: MutableEvaluationContext, params: Array) = + params[0] + params[1] + +} \ No newline at end of file diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorDivide.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorDivide.kt new file mode 100644 index 0000000..55eeb1e --- /dev/null +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorDivide.kt @@ -0,0 +1,21 @@ +package org.nwapw.abacus.plugin.standard + +import org.nwapw.abacus.context.MutableEvaluationContext +import org.nwapw.abacus.function.NumberOperator +import org.nwapw.abacus.function.OperatorAssociativity +import org.nwapw.abacus.function.OperatorType +import org.nwapw.abacus.number.NumberInterface + +/** + * The division operator. + * + * This is a standard operator that simply performs division. + */ +class OperatorDivide: NumberOperator(OperatorAssociativity.LEFT, OperatorType.BINARY_INFIX, 1) { + + override fun matchesParams(context: MutableEvaluationContext, params: Array) = + params.size == 2 + override fun applyInternal(context: MutableEvaluationContext, params: Array) = + params[0] / params[1] + +} \ No newline at end of file diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorMultiply.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorMultiply.kt new file mode 100644 index 0000000..98064fb --- /dev/null +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorMultiply.kt @@ -0,0 +1,21 @@ +package org.nwapw.abacus.plugin.standard + +import org.nwapw.abacus.context.MutableEvaluationContext +import org.nwapw.abacus.function.NumberOperator +import org.nwapw.abacus.function.OperatorAssociativity +import org.nwapw.abacus.function.OperatorType +import org.nwapw.abacus.number.NumberInterface + +/** + * The multiplication operator. + * + * This is a standard operator that simply performs multiplication. + */ +class OperatorMultiply: NumberOperator(OperatorAssociativity.LEFT, OperatorType.BINARY_INFIX, 1) { + + override fun matchesParams(context: MutableEvaluationContext, params: Array) = + params.size == 2 + override fun applyInternal(context: MutableEvaluationContext, params: Array) = + params[0] * params[1] + +} \ No newline at end of file diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorSubtract.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorSubtract.kt new file mode 100644 index 0000000..25d408c --- /dev/null +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorSubtract.kt @@ -0,0 +1,21 @@ +package org.nwapw.abacus.plugin.standard + +import org.nwapw.abacus.context.MutableEvaluationContext +import org.nwapw.abacus.function.NumberOperator +import org.nwapw.abacus.function.OperatorAssociativity +import org.nwapw.abacus.function.OperatorType +import org.nwapw.abacus.number.NumberInterface + +/** + * The subtraction operator. + * + * This is a standard operator that performs subtraction. + */ +class OperatorSubtract: NumberOperator(OperatorAssociativity.LEFT, OperatorType.BINARY_INFIX, 0) { + + override fun matchesParams(context: MutableEvaluationContext, params: Array) = + params.size == 2 + override fun applyInternal(context: MutableEvaluationContext, params: Array) = + params[0] - params[1] + +} \ No newline at end of file From 579ff78a99ec298fa630d892e31e5dec53e2bc36 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Sat, 23 Sep 2017 16:19:45 -0700 Subject: [PATCH 4/8] Move two more operators into separate classes. --- .../nwapw/abacus/plugin/StandardPlugin.java | 48 ++----------------- .../plugin/standard/OperatorFactorial.kt | 32 +++++++++++++ .../abacus/plugin/standard/OperatorNegate.kt | 17 +++++++ 3 files changed, 52 insertions(+), 45 deletions(-) create mode 100644 core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorFactorial.kt create mode 100644 core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNegate.kt diff --git a/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java b/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java index db962ba..c1d8862 100755 --- a/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java +++ b/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java @@ -5,10 +5,7 @@ import org.nwapw.abacus.function.*; import org.nwapw.abacus.number.NaiveNumber; import org.nwapw.abacus.number.NumberInterface; import org.nwapw.abacus.number.PreciseNumber; -import org.nwapw.abacus.plugin.standard.OperatorAdd; -import org.nwapw.abacus.plugin.standard.OperatorDivide; -import org.nwapw.abacus.plugin.standard.OperatorMultiply; -import org.nwapw.abacus.plugin.standard.OperatorSubtract; +import org.nwapw.abacus.plugin.standard.*; import org.nwapw.abacus.tree.TreeNode; import org.nwapw.abacus.tree.VariableNode; @@ -65,17 +62,7 @@ public class StandardPlugin extends Plugin { /** * The negation operator, - */ - public static final NumberOperator OP_NEGATE = new NumberOperator(OperatorAssociativity.LEFT, OperatorType.UNARY_PREFIX, 0) { - @Override - public boolean matchesParams(MutableEvaluationContext context, NumberInterface[] params) { - return params.length == 1; - } - - @Override - public NumberInterface applyInternal(MutableEvaluationContext context, NumberInterface[] params) { - return params[0].negate(); - } - }; + public static final NumberOperator OP_NEGATE = new OperatorNegate(); /** * The multiplication operator, * */ @@ -138,36 +125,7 @@ public class StandardPlugin extends Plugin { /** * The factorial operator, ! */ - public static final NumberOperator OP_FACTORIAL = new NumberOperator(OperatorAssociativity.RIGHT, OperatorType.UNARY_POSTFIX, 0) { - //private HashMap, ArrayList> storedList = new HashMap, ArrayList>(); - @Override - public boolean matchesParams(MutableEvaluationContext context, NumberInterface[] params) { - return params.length == 1 - && params[0].fractionalPart().compareTo(context.getInheritedNumberImplementation().instanceForString("0")) == 0 - && params[0].signum() >= 0; - } - - @Override - public NumberInterface applyInternal(MutableEvaluationContext context, NumberInterface[] params) { - NumberImplementation implementation = context.getInheritedNumberImplementation(); - if (params[0].signum() == 0) { - return implementation.instanceForString("1"); - } - NumberInterface one = implementation.instanceForString("1"); - NumberInterface factorial = params[0]; - NumberInterface multiplier = params[0]; - //It is necessary to later prevent calls of factorial on anything but non-negative integers. - while ((multiplier = multiplier.subtract(one)).signum() == 1) { - factorial = factorial.multiply(multiplier); - } - return factorial; - /*if(!storedList.containsKey(params[0].getClass())){ - storedList.put(params[0].getClass(), new ArrayList()); - storedList.get(params[0].getClass()).add(NaiveNumber.ONE.promoteTo(params[0].getClass())); - storedList.get(params[0].getClass()).add(NaiveNumber.ONE.promoteTo(params[0].getClass())); - }*/ - } - }; + public static final NumberOperator OP_FACTORIAL = new OperatorFactorial(); /** * The permutation operator. */ diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorFactorial.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorFactorial.kt new file mode 100644 index 0000000..4f5eab3 --- /dev/null +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorFactorial.kt @@ -0,0 +1,32 @@ +package org.nwapw.abacus.plugin.standard + +import org.nwapw.abacus.context.MutableEvaluationContext +import org.nwapw.abacus.function.NumberOperator +import org.nwapw.abacus.function.OperatorAssociativity +import org.nwapw.abacus.function.OperatorType +import org.nwapw.abacus.number.NumberInterface + +class OperatorFactorial: NumberOperator(OperatorAssociativity.LEFT, OperatorType.UNARY_POSTFIX, 0) { + + override fun matchesParams(context: MutableEvaluationContext, params: Array) = + params.size == 1 + && params[0].fractionalPart().compareTo(context.inheritedNumberImplementation.instanceForString("0")) == 0 + && params[0].signum() >= 0 + + override fun applyInternal(context: MutableEvaluationContext, params: Array): NumberInterface { + val implementation = context.inheritedNumberImplementation + val one = implementation.instanceForString("1") + if (params[0].signum() == 0) { + return one + } + var factorial = params[0] + var multiplier = params[0] - one + //It is necessary to later prevent calls of factorial on anything but non-negative integers. + while (multiplier.signum() == 1) { + factorial *= multiplier + multiplier -= one + } + return factorial + } + +} \ No newline at end of file diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNegate.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNegate.kt new file mode 100644 index 0000000..35b40a8 --- /dev/null +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNegate.kt @@ -0,0 +1,17 @@ +package org.nwapw.abacus.plugin.standard + +import org.nwapw.abacus.context.MutableEvaluationContext +import org.nwapw.abacus.function.NumberOperator +import org.nwapw.abacus.function.OperatorAssociativity +import org.nwapw.abacus.function.OperatorType +import org.nwapw.abacus.number.NumberInterface + +class OperatorNegate: NumberOperator(OperatorAssociativity.LEFT, OperatorType.UNARY_PREFIX, 0) { + + override fun matchesParams(context: MutableEvaluationContext, params: Array) = + params.size == 1 + + override fun applyInternal(context: MutableEvaluationContext, params: Array) = + -params[0] + +} \ No newline at end of file From f809183126e6153840ff83441de5128ae8b56637 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Sat, 23 Sep 2017 17:11:05 -0700 Subject: [PATCH 5/8] Move some more operators out of StandardPlugin.java to separate classes --- .../nwapw/abacus/plugin/StandardPlugin.java | 106 ++---------------- .../abacus/plugin/standard/OperatorCaret.kt | 38 +++++++ .../abacus/plugin/standard/OperatorDefine.kt | 28 +++++ .../plugin/standard/OperatorFactorial.kt | 7 +- .../abacus/plugin/standard/OperatorNcr.kt | 25 +++++ .../abacus/plugin/standard/OperatorNegate.kt | 5 + .../abacus/plugin/standard/OperatorNpr.kt | 42 +++++++ .../abacus/plugin/standard/OperatorSet.kt | 28 +++++ 8 files changed, 179 insertions(+), 100 deletions(-) create mode 100644 core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorCaret.kt create mode 100644 core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorDefine.kt create mode 100644 core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNcr.kt create mode 100644 core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNpr.kt create mode 100644 core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorSet.kt diff --git a/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java b/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java index c1d8862..c2ec80a 100755 --- a/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java +++ b/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java @@ -6,8 +6,6 @@ import org.nwapw.abacus.number.NaiveNumber; import org.nwapw.abacus.number.NumberInterface; import org.nwapw.abacus.number.PreciseNumber; import org.nwapw.abacus.plugin.standard.*; -import org.nwapw.abacus.tree.TreeNode; -import org.nwapw.abacus.tree.VariableNode; import java.util.ArrayList; import java.util.HashMap; @@ -21,36 +19,11 @@ public class StandardPlugin extends Plugin { /** * The set operator. */ - public final TreeValueOperator opSet = new TreeValueOperator(OperatorAssociativity.LEFT, OperatorType.BINARY_INFIX, 0) { - @Override - public boolean matchesParams(MutableEvaluationContext context, TreeNode[] params) { - return params.length == 2 && params[0] instanceof VariableNode; - } - - @Override - public NumberInterface applyInternal(MutableEvaluationContext context, TreeNode[] params) { - String assignTo = ((VariableNode) params[0]).getVariable(); - NumberInterface value = params[1].reduce(context.getInheritedReducer()); - context.setVariable(assignTo, value); - return value; - } - }; + public static final TreeValueOperator OP_SET = new OperatorSet(); /** * The define operator. */ - public final TreeValueOperator opDefine = new TreeValueOperator(OperatorAssociativity.LEFT, OperatorType.BINARY_INFIX, 0) { - @Override - public boolean matchesParams(MutableEvaluationContext context, TreeNode[] params) { - return params.length == 2 && params[0] instanceof VariableNode; - } - - @Override - public NumberInterface applyInternal(MutableEvaluationContext context, TreeNode[] params) { - String assignTo = ((VariableNode) params[0]).getVariable(); - context.setDefinition(assignTo, params[1]); - return params[1].reduce(context.getInheritedReducer()); - } - }; + public final TreeValueOperator OP_DEFINE = new OperatorDefine(); /** * The addition operator, + */ @@ -129,49 +102,11 @@ public class StandardPlugin extends Plugin { /** * The permutation operator. */ - public static final NumberOperator OP_NPR = new NumberOperator(OperatorAssociativity.RIGHT, OperatorType.BINARY_INFIX, 0) { - @Override - public boolean matchesParams(MutableEvaluationContext context, NumberInterface[] params) { - return params.length == 2 && params[0].fractionalPart().signum() == 0 - && params[1].fractionalPart().signum() == 0; - } - - @Override - public NumberInterface applyInternal(MutableEvaluationContext context, NumberInterface[] params) { - NumberImplementation implementation = context.getInheritedNumberImplementation(); - if (params[0].compareTo(params[1]) < 0 || - params[0].signum() < 0 || - (params[0].signum() == 0 && params[1].signum() != 0)) return implementation.instanceForString("0"); - NumberInterface total = implementation.instanceForString("1"); - NumberInterface multiplyBy = params[0]; - NumberInterface remainingMultiplications = params[1]; - NumberInterface halfway = params[0].divide(implementation.instanceForString("2")); - if (remainingMultiplications.compareTo(halfway) > 0) { - remainingMultiplications = params[0].subtract(remainingMultiplications); - } - while (remainingMultiplications.signum() > 0) { - total = total.multiply(multiplyBy); - remainingMultiplications = remainingMultiplications.subtract(implementation.instanceForString("1")); - multiplyBy = multiplyBy.subtract(implementation.instanceForString("1")); - } - return total; - } - }; + public static final NumberOperator OP_NPR = new OperatorNpr(); /** * The combination operator. */ - public static final NumberOperator OP_NCR = new NumberOperator(OperatorAssociativity.RIGHT, OperatorType.BINARY_INFIX, 0) { - @Override - public boolean matchesParams(MutableEvaluationContext context, NumberInterface[] params) { - return params.length == 2 && params[0].fractionalPart().signum() == 0 - && params[1].fractionalPart().signum() == 0; - } - - @Override - public NumberInterface applyInternal(MutableEvaluationContext context, NumberInterface[] params) { - return OP_NPR.apply(context, params).divide(OP_FACTORIAL.apply(context, params[1])); - } - }; + public static final NumberOperator OP_NCR = new OperatorNcr(); /** * The absolute value function, abs(-3) = 3 */ @@ -284,34 +219,7 @@ public class StandardPlugin extends Plugin { /** * The caret / pow operator, ^ */ - public static final NumberOperator OP_CARET = new NumberOperator(OperatorAssociativity.RIGHT, OperatorType.BINARY_INFIX, 2) { - @Override - public boolean matchesParams(MutableEvaluationContext context, NumberInterface[] params) { - NumberInterface zero = context.getInheritedNumberImplementation().instanceForString("0"); - return params.length == 2 - && !(params[0].compareTo(zero) == 0 - && params[1].compareTo(zero) == 0) - && !(params[0].signum() == -1 && params[1].fractionalPart().compareTo(zero) != 0); - } - - @Override - public NumberInterface applyInternal(MutableEvaluationContext context, NumberInterface[] params) { - NumberImplementation implementation = context.getInheritedNumberImplementation(); - NumberInterface zero = implementation.instanceForString("0"); - if (params[0].compareTo(zero) == 0) - return zero; - else if (params[1].compareTo(zero) == 0) - return implementation.instanceForString("1"); - //Detect integer bases: - if (params[0].fractionalPart().compareTo(implementation.instanceForString("0")) == 0 - && FUNCTION_ABS.apply(context, params[1]).compareTo(implementation.instanceForString(Integer.toString(Integer.MAX_VALUE))) < 0 - && FUNCTION_ABS.apply(context, params[1]).compareTo(implementation.instanceForString("1")) >= 0) { - NumberInterface[] newParams = {params[0], params[1].fractionalPart()}; - return params[0].intPow(params[1].floor().intValue()).multiply(applyInternal(context, newParams)); - } - return FUNCTION_EXP.apply(context, FUNCTION_LN.apply(context, FUNCTION_ABS.apply(context, params[0])).multiply(params[1])); - } - }; + public static final NumberOperator OP_CARET = new OperatorCaret(); /** * The square root function. */ @@ -677,8 +585,8 @@ public class StandardPlugin extends Plugin { registerOperator("^", OP_CARET); registerOperator("!", OP_FACTORIAL); - registerTreeValueOperator("=", opSet); - registerTreeValueOperator(":=", opDefine); + registerTreeValueOperator("=", OP_SET); + registerTreeValueOperator(":=", OP_DEFINE); registerOperator("nPr", OP_NPR); registerOperator("nCr", OP_NCR); diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorCaret.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorCaret.kt new file mode 100644 index 0000000..db81267 --- /dev/null +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorCaret.kt @@ -0,0 +1,38 @@ +package org.nwapw.abacus.plugin.standard + +import org.nwapw.abacus.context.MutableEvaluationContext +import org.nwapw.abacus.function.NumberOperator +import org.nwapw.abacus.function.OperatorAssociativity +import org.nwapw.abacus.function.OperatorType +import org.nwapw.abacus.number.NumberInterface +import org.nwapw.abacus.plugin.StandardPlugin.* + +/** + * The power operator. + * + * This is a standard operator that brings one number to the power of the other. + */ +class OperatorCaret: NumberOperator(OperatorAssociativity.RIGHT, OperatorType.BINARY_INFIX, 2) { + + override fun matchesParams(context: MutableEvaluationContext, params: Array) = + params.size == 2 + && !(params[0].signum() == 0 && params[1].signum() == 0) + && !(params[0].signum() == -1 && params[1].fractionalPart().signum() != 0) + + override fun applyInternal(context: MutableEvaluationContext, params: Array): NumberInterface { + val implementation = context.inheritedNumberImplementation + if (params[0].signum() == 0) + return implementation.instanceForString("0") + else if (params[1].signum() == 0) + return implementation.instanceForString("1") + //Detect integer bases: + if (params[0].fractionalPart().signum() == 0 + && FUNCTION_ABS.apply(context, params[1]) < implementation.instanceForString(Integer.toString(Integer.MAX_VALUE)) + && FUNCTION_ABS.apply(context, params[1]) >= implementation.instanceForString("1")) { + val newParams = arrayOf(params[0], params[1].fractionalPart()) + return params[0].intPow(params[1].floor().intValue()) * applyInternal(context, newParams) + } + return FUNCTION_EXP.apply(context, FUNCTION_LN.apply(context, FUNCTION_ABS.apply(context, params[0])) * params[1]) + } + +} \ No newline at end of file diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorDefine.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorDefine.kt new file mode 100644 index 0000000..6cb4979 --- /dev/null +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorDefine.kt @@ -0,0 +1,28 @@ +package org.nwapw.abacus.plugin.standard + +import org.nwapw.abacus.context.MutableEvaluationContext +import org.nwapw.abacus.function.OperatorAssociativity +import org.nwapw.abacus.function.OperatorType +import org.nwapw.abacus.function.TreeValueOperator +import org.nwapw.abacus.number.NumberInterface +import org.nwapw.abacus.tree.TreeNode +import org.nwapw.abacus.tree.VariableNode + +/** + * The definition operator. + * + * This is a standard operator that creates a definition - something that doesn't capture variable values + * when it's created, but rather the variables themselves, and changes when the variables it uses change. + */ +class OperatorDefine: TreeValueOperator(OperatorAssociativity.LEFT, OperatorType.BINARY_INFIX, 0) { + + override fun matchesParams(context: MutableEvaluationContext, params: Array) = + params.size == 2 && params[0] is VariableNode + + override fun applyInternal(context: MutableEvaluationContext, params: Array): NumberInterface { + val assignTo = (params[0] as VariableNode).variable + context.setDefinition(assignTo, params[1]) + return params[1].reduce(context.inheritedReducer) + } + +} \ No newline at end of file diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorFactorial.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorFactorial.kt index 4f5eab3..5af7970 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorFactorial.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorFactorial.kt @@ -6,11 +6,16 @@ import org.nwapw.abacus.function.OperatorAssociativity import org.nwapw.abacus.function.OperatorType import org.nwapw.abacus.number.NumberInterface +/** + * The factorial operator. + * + * This is a standard operator that simply evaluates the factorial of a number. + */ class OperatorFactorial: NumberOperator(OperatorAssociativity.LEFT, OperatorType.UNARY_POSTFIX, 0) { override fun matchesParams(context: MutableEvaluationContext, params: Array) = params.size == 1 - && params[0].fractionalPart().compareTo(context.inheritedNumberImplementation.instanceForString("0")) == 0 + && params[0].fractionalPart().signum() == 0 && params[0].signum() >= 0 override fun applyInternal(context: MutableEvaluationContext, params: Array): NumberInterface { diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNcr.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNcr.kt new file mode 100644 index 0000000..ae897d0 --- /dev/null +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNcr.kt @@ -0,0 +1,25 @@ +package org.nwapw.abacus.plugin.standard + +import org.nwapw.abacus.context.MutableEvaluationContext +import org.nwapw.abacus.function.NumberOperator +import org.nwapw.abacus.function.OperatorAssociativity +import org.nwapw.abacus.function.OperatorType +import org.nwapw.abacus.number.NumberInterface +import org.nwapw.abacus.plugin.StandardPlugin.* + +/** + * The "N choose R" operator. + * + * This is a standard operator that returns the number of possible combinations, regardless of order, + * of a certain size can be taken out of a pool of a bigger size. + */ +class OperatorNcr: NumberOperator(OperatorAssociativity.RIGHT, OperatorType.BINARY_INFIX, 0) { + + override fun matchesParams(context: MutableEvaluationContext, params: Array) = + params.size == 2 && params[0].fractionalPart().signum() == 0 + && params[1].fractionalPart().signum() == 0 + + override fun applyInternal(context: MutableEvaluationContext, params: Array) = + OP_NPR.apply(context, *params) / OP_FACTORIAL.apply(context, params[1]) + +} \ No newline at end of file diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNegate.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNegate.kt index 35b40a8..df085c2 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNegate.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNegate.kt @@ -6,6 +6,11 @@ import org.nwapw.abacus.function.OperatorAssociativity import org.nwapw.abacus.function.OperatorType import org.nwapw.abacus.number.NumberInterface +/** + * The negation operator. + * + * This is a standard operator that negates a number. + */ class OperatorNegate: NumberOperator(OperatorAssociativity.LEFT, OperatorType.UNARY_PREFIX, 0) { override fun matchesParams(context: MutableEvaluationContext, params: Array) = diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNpr.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNpr.kt new file mode 100644 index 0000000..21e61d3 --- /dev/null +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNpr.kt @@ -0,0 +1,42 @@ +package org.nwapw.abacus.plugin.standard + +import org.nwapw.abacus.context.MutableEvaluationContext +import org.nwapw.abacus.function.NumberOperator +import org.nwapw.abacus.function.OperatorAssociativity +import org.nwapw.abacus.function.OperatorType +import org.nwapw.abacus.number.NumberInterface + +/** + * The "N pick R" operator. + * + * his is a standard operator that returns the number of possible combinations + * of a certain size can be taken out of a pool of a bigger size. + */ +class OperatorNpr: NumberOperator(OperatorAssociativity.RIGHT, OperatorType.BINARY_INFIX, 0) { + + override fun matchesParams(context: MutableEvaluationContext, params: Array) = + params.size == 2 && params[0].fractionalPart().signum() == 0 + && params[1].fractionalPart().signum() == 0 + + override fun applyInternal(context: MutableEvaluationContext, params: Array): NumberInterface { + val implementation = context.inheritedNumberImplementation + if (params[0] < params[1] || + params[0].signum() < 0 || + params[0].signum() == 0 && params[1].signum() != 0) + return implementation.instanceForString("0") + var total = implementation.instanceForString("1") + var multiplyBy = params[0] + var remainingMultiplications = params[1] + val halfway = params[0] / implementation.instanceForString("2") + if (remainingMultiplications > halfway) { + remainingMultiplications = params[0] - remainingMultiplications + } + while (remainingMultiplications.signum() > 0) { + total *= multiplyBy + remainingMultiplications -= implementation.instanceForString("1") + multiplyBy -= implementation.instanceForString("1") + } + return total + } + +} \ No newline at end of file diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorSet.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorSet.kt new file mode 100644 index 0000000..23e9b1f --- /dev/null +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorSet.kt @@ -0,0 +1,28 @@ +package org.nwapw.abacus.plugin.standard + +import org.nwapw.abacus.context.MutableEvaluationContext +import org.nwapw.abacus.function.OperatorAssociativity +import org.nwapw.abacus.function.OperatorType +import org.nwapw.abacus.function.TreeValueOperator +import org.nwapw.abacus.number.NumberInterface +import org.nwapw.abacus.tree.TreeNode +import org.nwapw.abacus.tree.VariableNode + +/** + * The set operator. + * + * This is a standard operator that assigns a value to a variable name. + */ +class OperatorSet: TreeValueOperator(OperatorAssociativity.LEFT, OperatorType.BINARY_INFIX, 0) { + + override fun matchesParams(context: MutableEvaluationContext, params: Array) = + params.size == 2 && params[0] is VariableNode + + override fun applyInternal(context: MutableEvaluationContext, params: Array): NumberInterface { + val assignTo = (params[0] as VariableNode).variable + val value = params[1].reduce(context.inheritedReducer) + context.setVariable(assignTo, value) + return value + } + +} \ No newline at end of file From bd0274970696fb2985442ac43581edd996b94830 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Sat, 23 Sep 2017 17:13:56 -0700 Subject: [PATCH 6/8] Move all the operators into a separate subpackage. --- core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java | 2 +- .../nwapw/abacus/plugin/standard/{ => operator}/OperatorAdd.kt | 2 +- .../abacus/plugin/standard/{ => operator}/OperatorCaret.kt | 2 +- .../abacus/plugin/standard/{ => operator}/OperatorDefine.kt | 2 +- .../abacus/plugin/standard/{ => operator}/OperatorDivide.kt | 2 +- .../abacus/plugin/standard/{ => operator}/OperatorFactorial.kt | 2 +- .../abacus/plugin/standard/{ => operator}/OperatorMultiply.kt | 2 +- .../nwapw/abacus/plugin/standard/{ => operator}/OperatorNcr.kt | 2 +- .../abacus/plugin/standard/{ => operator}/OperatorNegate.kt | 2 +- .../nwapw/abacus/plugin/standard/{ => operator}/OperatorNpr.kt | 2 +- .../nwapw/abacus/plugin/standard/{ => operator}/OperatorSet.kt | 2 +- .../abacus/plugin/standard/{ => operator}/OperatorSubtract.kt | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) rename core/src/main/kotlin/org/nwapw/abacus/plugin/standard/{ => operator}/OperatorAdd.kt (93%) rename core/src/main/kotlin/org/nwapw/abacus/plugin/standard/{ => operator}/OperatorCaret.kt (97%) rename core/src/main/kotlin/org/nwapw/abacus/plugin/standard/{ => operator}/OperatorDefine.kt (95%) rename core/src/main/kotlin/org/nwapw/abacus/plugin/standard/{ => operator}/OperatorDivide.kt (93%) rename core/src/main/kotlin/org/nwapw/abacus/plugin/standard/{ => operator}/OperatorFactorial.kt (96%) rename core/src/main/kotlin/org/nwapw/abacus/plugin/standard/{ => operator}/OperatorMultiply.kt (93%) rename core/src/main/kotlin/org/nwapw/abacus/plugin/standard/{ => operator}/OperatorNcr.kt (95%) rename core/src/main/kotlin/org/nwapw/abacus/plugin/standard/{ => operator}/OperatorNegate.kt (93%) rename core/src/main/kotlin/org/nwapw/abacus/plugin/standard/{ => operator}/OperatorNpr.kt (97%) rename core/src/main/kotlin/org/nwapw/abacus/plugin/standard/{ => operator}/OperatorSet.kt (95%) rename core/src/main/kotlin/org/nwapw/abacus/plugin/standard/{ => operator}/OperatorSubtract.kt (93%) diff --git a/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java b/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java index c2ec80a..6c17dd8 100755 --- a/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java +++ b/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java @@ -5,7 +5,7 @@ import org.nwapw.abacus.function.*; import org.nwapw.abacus.number.NaiveNumber; import org.nwapw.abacus.number.NumberInterface; import org.nwapw.abacus.number.PreciseNumber; -import org.nwapw.abacus.plugin.standard.*; +import org.nwapw.abacus.plugin.standard.operator.*; import java.util.ArrayList; import java.util.HashMap; diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorAdd.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorAdd.kt similarity index 93% rename from core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorAdd.kt rename to core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorAdd.kt index 0f1c7d4..17db073 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorAdd.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorAdd.kt @@ -1,4 +1,4 @@ -package org.nwapw.abacus.plugin.standard +package org.nwapw.abacus.plugin.standard.operator import org.nwapw.abacus.context.MutableEvaluationContext import org.nwapw.abacus.function.NumberOperator diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorCaret.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorCaret.kt similarity index 97% rename from core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorCaret.kt rename to core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorCaret.kt index db81267..c820150 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorCaret.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorCaret.kt @@ -1,4 +1,4 @@ -package org.nwapw.abacus.plugin.standard +package org.nwapw.abacus.plugin.standard.operator import org.nwapw.abacus.context.MutableEvaluationContext import org.nwapw.abacus.function.NumberOperator diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorDefine.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorDefine.kt similarity index 95% rename from core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorDefine.kt rename to core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorDefine.kt index 6cb4979..8eff979 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorDefine.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorDefine.kt @@ -1,4 +1,4 @@ -package org.nwapw.abacus.plugin.standard +package org.nwapw.abacus.plugin.standard.operator import org.nwapw.abacus.context.MutableEvaluationContext import org.nwapw.abacus.function.OperatorAssociativity diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorDivide.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorDivide.kt similarity index 93% rename from core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorDivide.kt rename to core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorDivide.kt index 55eeb1e..94ad35a 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorDivide.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorDivide.kt @@ -1,4 +1,4 @@ -package org.nwapw.abacus.plugin.standard +package org.nwapw.abacus.plugin.standard.operator import org.nwapw.abacus.context.MutableEvaluationContext import org.nwapw.abacus.function.NumberOperator diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorFactorial.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorFactorial.kt similarity index 96% rename from core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorFactorial.kt rename to core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorFactorial.kt index 5af7970..64071a8 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorFactorial.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorFactorial.kt @@ -1,4 +1,4 @@ -package org.nwapw.abacus.plugin.standard +package org.nwapw.abacus.plugin.standard.operator import org.nwapw.abacus.context.MutableEvaluationContext import org.nwapw.abacus.function.NumberOperator diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorMultiply.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorMultiply.kt similarity index 93% rename from core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorMultiply.kt rename to core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorMultiply.kt index 98064fb..a92e8ba 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorMultiply.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorMultiply.kt @@ -1,4 +1,4 @@ -package org.nwapw.abacus.plugin.standard +package org.nwapw.abacus.plugin.standard.operator import org.nwapw.abacus.context.MutableEvaluationContext import org.nwapw.abacus.function.NumberOperator diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNcr.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorNcr.kt similarity index 95% rename from core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNcr.kt rename to core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorNcr.kt index ae897d0..7b1a45d 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNcr.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorNcr.kt @@ -1,4 +1,4 @@ -package org.nwapw.abacus.plugin.standard +package org.nwapw.abacus.plugin.standard.operator import org.nwapw.abacus.context.MutableEvaluationContext import org.nwapw.abacus.function.NumberOperator diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNegate.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorNegate.kt similarity index 93% rename from core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNegate.kt rename to core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorNegate.kt index df085c2..a53b069 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNegate.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorNegate.kt @@ -1,4 +1,4 @@ -package org.nwapw.abacus.plugin.standard +package org.nwapw.abacus.plugin.standard.operator import org.nwapw.abacus.context.MutableEvaluationContext import org.nwapw.abacus.function.NumberOperator diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNpr.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorNpr.kt similarity index 97% rename from core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNpr.kt rename to core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorNpr.kt index 21e61d3..b053458 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorNpr.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorNpr.kt @@ -1,4 +1,4 @@ -package org.nwapw.abacus.plugin.standard +package org.nwapw.abacus.plugin.standard.operator import org.nwapw.abacus.context.MutableEvaluationContext import org.nwapw.abacus.function.NumberOperator diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorSet.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorSet.kt similarity index 95% rename from core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorSet.kt rename to core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorSet.kt index 23e9b1f..89019dd 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorSet.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorSet.kt @@ -1,4 +1,4 @@ -package org.nwapw.abacus.plugin.standard +package org.nwapw.abacus.plugin.standard.operator import org.nwapw.abacus.context.MutableEvaluationContext import org.nwapw.abacus.function.OperatorAssociativity diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorSubtract.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorSubtract.kt similarity index 93% rename from core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorSubtract.kt rename to core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorSubtract.kt index 25d408c..bd0e37f 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/OperatorSubtract.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorSubtract.kt @@ -1,4 +1,4 @@ -package org.nwapw.abacus.plugin.standard +package org.nwapw.abacus.plugin.standard.operator import org.nwapw.abacus.context.MutableEvaluationContext import org.nwapw.abacus.function.NumberOperator From b4214f57142a89f90ccf2fd4b64ff0d7de0128d7 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Sat, 23 Sep 2017 16:07:59 -0700 Subject: [PATCH 7/8] Rewrite the parsing interfaces in Kotlin. --- .../abacus/parsing/ShuntingYardParser.java | 4 +- .../org/nwapw/abacus/parsing/Tokenizer.java | 20 -------- .../org/nwapw/abacus/parsing/TreeBuilder.java | 48 ------------------- .../org/nwapw/abacus/parsing/Parser.kt} | 18 +++---- .../org/nwapw/abacus/parsing/Tokenizer.kt | 21 ++++++++ .../org/nwapw/abacus/parsing/TreeBuilder.kt | 26 ++++++++++ 6 files changed, 59 insertions(+), 78 deletions(-) delete mode 100644 core/src/main/java/org/nwapw/abacus/parsing/Tokenizer.java delete mode 100644 core/src/main/java/org/nwapw/abacus/parsing/TreeBuilder.java rename core/src/main/{java/org/nwapw/abacus/parsing/Parser.java => kotlin/org/nwapw/abacus/parsing/Parser.kt} (52%) create mode 100644 core/src/main/kotlin/org/nwapw/abacus/parsing/Tokenizer.kt create mode 100644 core/src/main/kotlin/org/nwapw/abacus/parsing/TreeBuilder.kt diff --git a/core/src/main/java/org/nwapw/abacus/parsing/ShuntingYardParser.java b/core/src/main/java/org/nwapw/abacus/parsing/ShuntingYardParser.java index f405aa9..67bc1f6 100644 --- a/core/src/main/java/org/nwapw/abacus/parsing/ShuntingYardParser.java +++ b/core/src/main/java/org/nwapw/abacus/parsing/ShuntingYardParser.java @@ -124,7 +124,7 @@ public class ShuntingYardParser implements Parser>, PluginListe * @param matches the list of tokens from the source string. * @return the construct tree expression. */ - public TreeNode constructRecursive(List> matches) { + public TreeNode constructRecursive(List> matches) { if (matches.size() == 0) throw new ParseException("no tokens left in input"); Match match = matches.remove(0); TokenType matchType = match.getType(); @@ -172,7 +172,7 @@ public class ShuntingYardParser implements Parser>, PluginListe } @Override - public TreeNode constructTree(List> tokens) { + public TreeNode constructTree(List> tokens) { if (tokens.isEmpty()) throw new ParseException("no input tokens"); tokens = intoPostfix(new ArrayList<>(tokens)); Collections.reverse(tokens); diff --git a/core/src/main/java/org/nwapw/abacus/parsing/Tokenizer.java b/core/src/main/java/org/nwapw/abacus/parsing/Tokenizer.java deleted file mode 100644 index 00606d0..0000000 --- a/core/src/main/java/org/nwapw/abacus/parsing/Tokenizer.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.nwapw.abacus.parsing; - -import java.util.List; - -/** - * Interface that provides the ability to convert a string into a list of tokens. - * - * @param the type of the tokens produced. - */ -public interface Tokenizer { - - /** - * Converts a string into tokens. - * - * @param string the string to convert. - * @return the list of tokens, or null on error. - */ - public List tokenizeString(String string); - -} diff --git a/core/src/main/java/org/nwapw/abacus/parsing/TreeBuilder.java b/core/src/main/java/org/nwapw/abacus/parsing/TreeBuilder.java deleted file mode 100644 index 78c2331..0000000 --- a/core/src/main/java/org/nwapw/abacus/parsing/TreeBuilder.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.nwapw.abacus.parsing; - -import org.nwapw.abacus.tree.TreeNode; - -import java.util.List; - -/** - * TreeBuilder class used to piece together a Tokenizer and - * Parser of the same kind. This is used to essentially avoid - * working with any parameters at all, and the generics - * in this class are used only to ensure the tokenizer and parser - * are of the same type. - * - * @param the type of tokens created by the tokenizer and used by the parser. - */ -public class TreeBuilder { - - /** - * The tokenizer used to convert a string into tokens. - */ - private Tokenizer tokenizer; - /** - * The parser used to parse a list of tokens into a tree. - */ - private Parser parser; - - /** - * Create a new Tree Builder with the given tokenizer and parser - * - * @param tokenizer the tokenizer to turn strings into tokens - * @param parser the parser to turn tokens into a tree - */ - public TreeBuilder(Tokenizer tokenizer, Parser parser) { - this.tokenizer = tokenizer; - this.parser = parser; - } - - /** - * Parse the given string into a tree. - * - * @param input the string to parse into a tree. - * @return the resulting tree. - */ - public TreeNode fromString(String input) { - return parser.constructTree(tokenizer.tokenizeString(input)); - } - -} diff --git a/core/src/main/java/org/nwapw/abacus/parsing/Parser.java b/core/src/main/kotlin/org/nwapw/abacus/parsing/Parser.kt similarity index 52% rename from core/src/main/java/org/nwapw/abacus/parsing/Parser.java rename to core/src/main/kotlin/org/nwapw/abacus/parsing/Parser.kt index f2c80fc..be2dde3 100644 --- a/core/src/main/java/org/nwapw/abacus/parsing/Parser.java +++ b/core/src/main/kotlin/org/nwapw/abacus/parsing/Parser.kt @@ -1,16 +1,17 @@ -package org.nwapw.abacus.parsing; +package org.nwapw.abacus.parsing -import org.nwapw.abacus.tree.TreeNode; - -import java.util.List; +import org.nwapw.abacus.tree.TreeNode /** - * An itnerface that provides the ability to convert a list of tokens + * Converter from tokens into a parse tree. + * + * An interface that provides the ability to convert a list of tokens * into a parse tree. * * @param the type of tokens accepted by this parser. */ -public interface Parser { + +interface Parser { /** * Constructs a tree out of the given tokens. @@ -18,5 +19,6 @@ public interface Parser { * @param tokens the tokens to construct a tree from. * @return the constructed tree, or null on error. */ - public TreeNode constructTree(List tokens); -} + fun constructTree(tokens: List): TreeNode + +} \ No newline at end of file diff --git a/core/src/main/kotlin/org/nwapw/abacus/parsing/Tokenizer.kt b/core/src/main/kotlin/org/nwapw/abacus/parsing/Tokenizer.kt new file mode 100644 index 0000000..642aed6 --- /dev/null +++ b/core/src/main/kotlin/org/nwapw/abacus/parsing/Tokenizer.kt @@ -0,0 +1,21 @@ +package org.nwapw.abacus.parsing + +/** + * Converter from string to tokens. + * + * Interface that converts a string into a list + * of tokens of a certain type. + * + * @param the type of the tokens produced. + */ +interface Tokenizer { + + /** + * Converts a string into tokens. + * + * @param string the string to convert. + * @return the list of tokens, or null on error. + */ + fun tokenizeString(string: String): List + +} diff --git a/core/src/main/kotlin/org/nwapw/abacus/parsing/TreeBuilder.kt b/core/src/main/kotlin/org/nwapw/abacus/parsing/TreeBuilder.kt new file mode 100644 index 0000000..cdcd24b --- /dev/null +++ b/core/src/main/kotlin/org/nwapw/abacus/parsing/TreeBuilder.kt @@ -0,0 +1,26 @@ +package org.nwapw.abacus.parsing + +import org.nwapw.abacus.tree.TreeNode + +/** + * Class to combine a [Tokenizer] and a [Parser] + * + * TreeBuilder class used to piece together a Tokenizer and + * Parser of the same kind. This is used to essentially avoid + * working with any parameters at all, and the generics + * in this class are used only to ensure the tokenizer and parser + * are of the same type. + * + * @param the type of tokens created by the tokenizer and used by the parser. + */ +class TreeBuilder(private val tokenizer: Tokenizer, private val parser: Parser) { + + /** + * Parses the given [string] into a tree. + * + * @param string the string to parse into a tree. + * @return the resulting tree. + */ + fun fromString(string: String): TreeNode = parser.constructTree(tokenizer.tokenizeString(string)) + +} \ No newline at end of file From e05b2ac8d54122e548d8dbc8dcc66e930f8f3a18 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Sat, 23 Sep 2017 22:16:44 -0700 Subject: [PATCH 8/8] Move the StandardPlugin into a "standard" package along with the ops. --- .../nwapw/abacus/plugin/{ => standard}/StandardPlugin.java | 5 ++++- core/src/main/kotlin/org/nwapw/abacus/Abacus.kt | 2 +- .../nwapw/abacus/plugin/standard/operator/OperatorCaret.kt | 2 +- .../org/nwapw/abacus/plugin/standard/operator/OperatorNcr.kt | 2 +- .../test/java/org/nwapw/abacus/tests/CalculationTests.java | 2 +- core/src/test/java/org/nwapw/abacus/tests/RangeTests.java | 2 +- fx/src/main/java/org/nwapw/abacus/fx/AbacusController.java | 2 +- 7 files changed, 10 insertions(+), 7 deletions(-) rename core/src/main/java/org/nwapw/abacus/plugin/{ => standard}/StandardPlugin.java (99%) diff --git a/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java b/core/src/main/java/org/nwapw/abacus/plugin/standard/StandardPlugin.java similarity index 99% rename from core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java rename to core/src/main/java/org/nwapw/abacus/plugin/standard/StandardPlugin.java index 6c17dd8..7fb94ff 100755 --- a/core/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java +++ b/core/src/main/java/org/nwapw/abacus/plugin/standard/StandardPlugin.java @@ -1,10 +1,13 @@ -package org.nwapw.abacus.plugin; +package org.nwapw.abacus.plugin.standard; import org.nwapw.abacus.context.MutableEvaluationContext; import org.nwapw.abacus.function.*; import org.nwapw.abacus.number.NaiveNumber; import org.nwapw.abacus.number.NumberInterface; import org.nwapw.abacus.number.PreciseNumber; +import org.nwapw.abacus.plugin.NumberImplementation; +import org.nwapw.abacus.plugin.Plugin; +import org.nwapw.abacus.plugin.PluginManager; import org.nwapw.abacus.plugin.standard.operator.*; import java.util.ArrayList; diff --git a/core/src/main/kotlin/org/nwapw/abacus/Abacus.kt b/core/src/main/kotlin/org/nwapw/abacus/Abacus.kt index 4272aa8..f84f25a 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/Abacus.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/Abacus.kt @@ -8,7 +8,7 @@ import org.nwapw.abacus.parsing.LexerTokenizer import org.nwapw.abacus.parsing.ShuntingYardParser import org.nwapw.abacus.parsing.TreeBuilder import org.nwapw.abacus.plugin.PluginManager -import org.nwapw.abacus.plugin.StandardPlugin +import org.nwapw.abacus.plugin.standard.StandardPlugin import org.nwapw.abacus.tree.EvaluationResult import org.nwapw.abacus.tree.NumberReducer import org.nwapw.abacus.tree.TreeNode diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorCaret.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorCaret.kt index c820150..b673851 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorCaret.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorCaret.kt @@ -5,7 +5,7 @@ import org.nwapw.abacus.function.NumberOperator import org.nwapw.abacus.function.OperatorAssociativity import org.nwapw.abacus.function.OperatorType import org.nwapw.abacus.number.NumberInterface -import org.nwapw.abacus.plugin.StandardPlugin.* +import org.nwapw.abacus.plugin.standard.StandardPlugin.* /** * The power operator. diff --git a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorNcr.kt b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorNcr.kt index 7b1a45d..15cada8 100644 --- a/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorNcr.kt +++ b/core/src/main/kotlin/org/nwapw/abacus/plugin/standard/operator/OperatorNcr.kt @@ -5,7 +5,7 @@ import org.nwapw.abacus.function.NumberOperator import org.nwapw.abacus.function.OperatorAssociativity import org.nwapw.abacus.function.OperatorType import org.nwapw.abacus.number.NumberInterface -import org.nwapw.abacus.plugin.StandardPlugin.* +import org.nwapw.abacus.plugin.standard.StandardPlugin.* /** * The "N choose R" operator. diff --git a/core/src/test/java/org/nwapw/abacus/tests/CalculationTests.java b/core/src/test/java/org/nwapw/abacus/tests/CalculationTests.java index b1c0cd4..f4d5597 100755 --- a/core/src/test/java/org/nwapw/abacus/tests/CalculationTests.java +++ b/core/src/test/java/org/nwapw/abacus/tests/CalculationTests.java @@ -7,7 +7,7 @@ import org.nwapw.abacus.Abacus; import org.nwapw.abacus.config.Configuration; import org.nwapw.abacus.exception.DomainException; import org.nwapw.abacus.number.NumberInterface; -import org.nwapw.abacus.plugin.StandardPlugin; +import org.nwapw.abacus.plugin.standard.StandardPlugin; import org.nwapw.abacus.tree.TreeNode; public class CalculationTests { diff --git a/core/src/test/java/org/nwapw/abacus/tests/RangeTests.java b/core/src/test/java/org/nwapw/abacus/tests/RangeTests.java index 85f3bc0..a9c0cf1 100644 --- a/core/src/test/java/org/nwapw/abacus/tests/RangeTests.java +++ b/core/src/test/java/org/nwapw/abacus/tests/RangeTests.java @@ -9,7 +9,7 @@ import org.nwapw.abacus.number.NaiveNumber; import org.nwapw.abacus.number.NumberInterface; import org.nwapw.abacus.number.NumberRange; import org.nwapw.abacus.number.PreciseNumber; -import org.nwapw.abacus.plugin.StandardPlugin; +import org.nwapw.abacus.plugin.standard.StandardPlugin; import java.util.function.Function; diff --git a/fx/src/main/java/org/nwapw/abacus/fx/AbacusController.java b/fx/src/main/java/org/nwapw/abacus/fx/AbacusController.java index 25f8632..fc9d6cb 100644 --- a/fx/src/main/java/org/nwapw/abacus/fx/AbacusController.java +++ b/fx/src/main/java/org/nwapw/abacus/fx/AbacusController.java @@ -19,7 +19,7 @@ import org.nwapw.abacus.number.*; import org.nwapw.abacus.plugin.ClassFinder; import org.nwapw.abacus.plugin.PluginListener; import org.nwapw.abacus.plugin.PluginManager; -import org.nwapw.abacus.plugin.StandardPlugin; +import org.nwapw.abacus.plugin.standard.StandardPlugin; import org.nwapw.abacus.tree.EvaluationResult; import org.nwapw.abacus.tree.TreeNode;