From e7fea138534cb3f9bc79ae26157f0f4cc73b78b9 Mon Sep 17 00:00:00 2001 From: Anton Shvetz Date: Mon, 13 May 2024 01:14:57 +0300 Subject: [PATCH] Make PsyScalar extend Comparable. Remove redundant code. --- .../coneforest/psylla/core/PsyBigInteger.java | 6 ++- .../coneforest/psylla/core/PsyBoolean.java | 29 +----------- .../coneforest/psylla/core/PsyInteger.java | 4 +- .../coneforest/psylla/core/PsyRational.java | 4 +- .../coneforest/psylla/core/PsyReal.java | 3 +- .../psylla/core/PsyRealNumeric.java | 45 +------------------ .../coneforest/psylla/core/PsyScalar.java | 33 ++++++++++---- .../coneforest/psylla/core/PsyTextual.java | 34 +++----------- 8 files changed, 43 insertions(+), 115 deletions(-) diff --git a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyBigInteger.java b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyBigInteger.java index 4f6d4445..57c96be7 100644 --- a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyBigInteger.java +++ b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyBigInteger.java @@ -209,14 +209,16 @@ public PsyInteger psySignum() } @Override - public int cmp(final PsyRealNumeric oRealNumeric) + public int compareTo(final PsyRealNumeric oRealNumeric) { if(oRealNumeric instanceof PsyIntegral oIntegral) return value.compareTo(oIntegral.bigIntegerValue()); if(oRealNumeric instanceof PsyRational oRational) - return psyMul(oRational.psyDenominator()).cmp(oRational.psyNumerator()); + return psyMul(oRational.psyDenominator()).compareTo(oRational.psyNumerator()); if(oRealNumeric instanceof PsyReal oReal) return Double.compare(doubleValue(), oReal.doubleValue()); + + // TODO throw new ClassCastException(); } diff --git a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyBoolean.java b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyBoolean.java index 008497bf..0aeaf84a 100644 --- a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyBoolean.java +++ b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyBoolean.java @@ -98,34 +98,9 @@ public PsyBoolean psyEq(final PsyObject o) } @Override - public PsyInteger psyCmp(final PsyBoolean oBoolean) + public int compareTo(final PsyBoolean oBoolean) { - return this==oBoolean? PsyInteger.ZERO: - this==FALSE? PsyInteger.MINUS_ONE: PsyInteger.ONE; - } - - @Override - public PsyBoolean psyLt(final PsyBoolean oBoolean) - { - return PsyBoolean.of(this==FALSE && oBoolean==TRUE); - } - - @Override - public PsyBoolean psyLe(final PsyBoolean oBoolean) - { - return PsyBoolean.of(this==FALSE || this==oBoolean); - } - - @Override - public PsyBoolean psyGt(final PsyBoolean oBoolean) - { - return PsyBoolean.of(this==TRUE && this==FALSE); - } - - @Override - public PsyBoolean psyGe(final PsyBoolean oBoolean) - { - return PsyBoolean.of(this==TRUE || this==oBoolean); + return this==oBoolean? 0: this==FALSE? -1: 1; } @Override diff --git a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyInteger.java b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyInteger.java index af649c4c..abbb4c6e 100644 --- a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyInteger.java +++ b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyInteger.java @@ -236,14 +236,14 @@ public PsyRealNumeric psyMul(final PsyRealNumeric oRealNumeric) } @Override - public int cmp(final PsyRealNumeric oRealNumeric) + public int compareTo(final PsyRealNumeric oRealNumeric) { if(oRealNumeric instanceof PsyInteger oInteger) return Long.compare(value, oInteger.value); if(oRealNumeric instanceof PsyBigInteger oBigInteger) return bigIntegerValue().compareTo(oBigInteger.bigIntegerValue()); if(oRealNumeric instanceof PsyRational oRational) - return psyMul(oRational.psyDenominator()).cmp(oRational.psyNumerator()); + return psyMul(oRational.psyDenominator()).compareTo(oRational.psyNumerator()); if(oRealNumeric instanceof PsyReal oReal) return Double.compare(doubleValue(), oReal.doubleValue()); throw new ClassCastException(); diff --git a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyRational.java b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyRational.java index 5f7b3da6..ad39f3a2 100644 --- a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyRational.java +++ b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyRational.java @@ -158,11 +158,11 @@ public static PsyRational of(final PsyIntegral oNumerator, final PsyIntegral oDe } @Override - default public int cmp(final PsyRealNumeric oNumeric) + default public int compareTo(final PsyRealNumeric oNumeric) { if(oNumeric instanceof PsyRational oRational) return psyNumerator().psyMul(oRational.psyDenominator()) - .cmp(psyDenominator().psyMul(oRational.psyNumerator())); + .compareTo(psyDenominator().psyMul(oRational.psyNumerator())); // TODO return Double.compare(doubleValue(), oNumeric.doubleValue()); } diff --git a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyReal.java b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyReal.java index c7a9f777..f1b0e7c8 100644 --- a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyReal.java +++ b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyReal.java @@ -171,12 +171,11 @@ public PsyReal psyCeiling() } @Override - public int cmp(final PsyRealNumeric oNumeric) + public int compareTo(final PsyRealNumeric oNumeric) { return Double.compare(value, oNumeric.doubleValue()); } - @Override public String toSyntaxString() { diff --git a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyRealNumeric.java b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyRealNumeric.java index b2c752b1..50c0342c 100644 --- a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyRealNumeric.java +++ b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyRealNumeric.java @@ -228,52 +228,11 @@ default public PsyReal psyHypot(final PsyRealNumeric oRealNumeric) @Override default public PsyBoolean psyEq(final PsyObject o) { - return PsyBoolean.of(o instanceof PsyRealNumeric oRealNumeric && cmp(oRealNumeric)==0); + return PsyBoolean.of(o instanceof PsyRealNumeric oRealNumeric && compareTo(oRealNumeric)==0); } - public int cmp(final PsyRealNumeric oRealNumeric); - - /** - * The “less” arithmetic comparison. - */ - @Override - default public PsyBoolean psyLt(final PsyRealNumeric oRealNumeric) - { - return PsyBoolean.of(cmp(oRealNumeric)<0); - } - - /** - * The “less or equal” arithmetic comparison. - */ @Override - default public PsyBoolean psyLe(final PsyRealNumeric oRealNumeric) - { - return PsyBoolean.of(cmp(oRealNumeric)<=0); - } - - /** - * The “greater” arithmetic comparison. - */ - @Override - default public PsyBoolean psyGt(final PsyRealNumeric oRealNumeric) - { - return PsyBoolean.of(cmp(oRealNumeric)>0); - } - - /** - * The “greater or equal” arithmetic comparison. - */ - @Override - default public PsyBoolean psyGe(final PsyRealNumeric oRealNumeric) - { - return PsyBoolean.of(cmp(oRealNumeric)>=0); - } - - @Override - default public PsyInteger psyCmp(final PsyRealNumeric oRealNumeric) - { - return PsyInteger.of(cmp(oRealNumeric)); - } + public int compareTo(final PsyRealNumeric oRealNumeric); /** * Context action of the {@code ceiling} operator. diff --git a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyScalar.java b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyScalar.java index b94644fe..1ec668e3 100644 --- a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyScalar.java +++ b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyScalar.java @@ -10,9 +10,11 @@ */ @Type("scalar") public interface PsyScalar - extends PsyObject + extends PsyObject, Comparable { + public int compareTo(T oScalar); + /** * Returns a {@code boolean} object representing the result of “less” comparison of this object * and a given object. @@ -20,7 +22,10 @@ public interface PsyScalar * @param oScalar an object with which this object is compared. * @return a {@code boolean} value indicating if this object is less than given object. */ - public PsyBoolean psyLt(final T oScalar); + default public PsyBoolean psyLt(final T oScalar) + { + return PsyBoolean.of(compareTo(oScalar)<0); + } /** * Returns a {@code boolean} object representing the result of “less or equal” comparison of @@ -30,7 +35,10 @@ public interface PsyScalar * @return a {@code boolean} value indicating if this object is less than or equal to given * object. */ - public PsyBoolean psyLe(final T oScalar); + default public PsyBoolean psyLe(final T oScalar) + { + return PsyBoolean.of(compareTo(oScalar)<=0); + } /** * Returns a {@code boolean} object representing the result of “greater” comparison of this @@ -39,7 +47,10 @@ public interface PsyScalar * @param oScalar an object with which this object is compared. * @return a {@code boolean} result of comparison. */ - public PsyBoolean psyGt(final T oScalar); + default public PsyBoolean psyGt(final T oScalar) + { + return PsyBoolean.of(compareTo(oScalar)>0); + } /** * Returns a {@code boolean} object representing the result of “greater or equal” comparison of @@ -48,7 +59,10 @@ public interface PsyScalar * @param oScalar an object with which this object is compared. * @return a {@code boolean} result of comparison. */ - public PsyBoolean psyGe(final T oScalar); + default public PsyBoolean psyGe(final T oScalar) + { + return PsyBoolean.of(compareTo(oScalar)>=0); + } /** * Compares this object against given object and returns an {@code integer} indicating the @@ -59,7 +73,10 @@ public interface PsyScalar * @param oScalar an object with which this object is compared. * @return a result of the comparison. */ - public PsyInteger psyCmp(final T oScalar); + default public PsyInteger psyCmp(final T oScalar) + { + return PsyInteger.of(compareTo(oScalar)); + } /** * Returns the minimum of this {@code scalar} and given {@code scalar}. @@ -69,7 +86,7 @@ public interface PsyScalar */ default public PsyScalar psyMin(final T oScalar) { - return psyLt(oScalar).booleanValue()? this: oScalar; + return compareTo(oScalar)<0? this: oScalar; } /** @@ -80,7 +97,7 @@ default public PsyScalar psyMin(final T oScalar) */ default public PsyScalar psyMax(final T oScalar) { - return psyGt(oScalar).booleanValue()? this: oScalar; + return compareTo(oScalar)>0? this: oScalar; } /** diff --git a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyTextual.java b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyTextual.java index da2cd41a..7d436c1b 100644 --- a/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyTextual.java +++ b/src/main/java/coneforest.psylla/coneforest/psylla/core/PsyTextual.java @@ -91,40 +91,16 @@ default public int length() } @Override - default public PsyBoolean psyEq(final PsyObject o) - { - return PsyBoolean.of(o instanceof PsyTextual - && stringValue().equals(((PsyTextual)o).stringValue())); - } - - @Override - default public PsyBoolean psyLt(final PsyTextual oString) - { - return PsyBoolean.of(stringValue().compareTo(oString.stringValue())<0); - } - - @Override - default public PsyBoolean psyLe(final PsyTextual oString) + default public int compareTo(final PsyTextual oTextual) { - return PsyBoolean.of(stringValue().compareTo(oString.stringValue())<=0); + return stringValue().compareTo(oTextual.stringValue()); } @Override - default public PsyBoolean psyGt(final PsyTextual oString) - { - return PsyBoolean.of(stringValue().compareTo(oString.stringValue())>0); - } - - @Override - default public PsyBoolean psyGe(final PsyTextual oString) - { - return PsyBoolean.of(stringValue().compareTo(oString.stringValue())>=0); - } - - @Override - default public PsyInteger psyCmp(final PsyTextual oString) + default public PsyBoolean psyEq(final PsyObject o) { - return PsyInteger.of(stringValue().compareTo(oString.stringValue())); + return PsyBoolean.of(o instanceof PsyTextual + && stringValue().equals(((PsyTextual)o).stringValue())); } default public PsyArray psySplit(final PsyRegExp oRegExp)