|
|
@@ -0,0 +1,315 @@
|
|
|
+package net.ranides.assira.math;
|
|
|
+
|
|
|
+import java.math.BigInteger;
|
|
|
+
|
|
|
+public abstract class MutableNumber extends Number {
|
|
|
+
|
|
|
+ public abstract void set(Number value);
|
|
|
+
|
|
|
+ public abstract void increment();
|
|
|
+
|
|
|
+ public abstract void decrement();
|
|
|
+
|
|
|
+ public abstract void add(Number value);
|
|
|
+
|
|
|
+ public abstract void subtract(Number value);
|
|
|
+
|
|
|
+ public abstract void divide(Number value);
|
|
|
+
|
|
|
+ public abstract void multiply(Number value);
|
|
|
+
|
|
|
+ public abstract void pow(Number value);
|
|
|
+
|
|
|
+ public abstract void negate();
|
|
|
+
|
|
|
+ public abstract void abs();
|
|
|
+
|
|
|
+ public static MutableInt of(int value) {
|
|
|
+ return new MutableInt(value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static MutableLong of(long value) {
|
|
|
+ return new MutableLong(value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static MutableDouble of(double value) {
|
|
|
+ return new MutableDouble(value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static class MutableInt extends MutableNumber implements Comparable<MutableInt> {
|
|
|
+
|
|
|
+ private static final long serialVersionUID = 2L;
|
|
|
+
|
|
|
+ private int value;
|
|
|
+
|
|
|
+ public MutableInt(int value) {
|
|
|
+ this.value = value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int intValue() {
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public long longValue() {
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public float floatValue() {
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public double doubleValue() {
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int compareTo(MutableInt value) {
|
|
|
+ return Integer.compare(this.value, value.value);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void set(Number value) {
|
|
|
+ this.value = value.intValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ public void set(int value) {
|
|
|
+ this.value = value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void increment() {
|
|
|
+ this.value++;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void decrement() {
|
|
|
+ this.value--;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void add(Number value) {
|
|
|
+ this.value += value.intValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void subtract(Number value) {
|
|
|
+ this.value -= value.intValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void divide(Number value) {
|
|
|
+ this.value /= value.intValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void multiply(Number value) {
|
|
|
+ this.value *= value.intValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void pow(Number value) {
|
|
|
+ this.value = BigInteger.valueOf(this.value).pow(value.intValue()).intValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void negate() {
|
|
|
+ this.value = -this.value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void abs() {
|
|
|
+ this.value = Math.abs(this.value);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public static class MutableLong extends MutableNumber implements Comparable<MutableLong> {
|
|
|
+
|
|
|
+ private static final long serialVersionUID = 2L;
|
|
|
+
|
|
|
+ private long value;
|
|
|
+
|
|
|
+ public MutableLong(long value) {
|
|
|
+ this.value = value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int intValue() {
|
|
|
+ return (int)value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public long longValue() {
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public float floatValue() {
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public double doubleValue() {
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int compareTo(MutableLong value) {
|
|
|
+ return Long.compare(this.value, value.value);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void set(Number value) {
|
|
|
+ this.value = value.longValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ public void set(long value) {
|
|
|
+ this.value = value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void increment() {
|
|
|
+ this.value++;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void decrement() {
|
|
|
+ this.value--;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void add(Number value) {
|
|
|
+ this.value += value.longValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void subtract(Number value) {
|
|
|
+ this.value -= value.longValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void divide(Number value) {
|
|
|
+ this.value /= value.longValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void multiply(Number value) {
|
|
|
+ this.value *= value.longValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void pow(Number value) {
|
|
|
+ this.value = BigInteger.valueOf(this.value).pow(value.intValue()).longValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void negate() {
|
|
|
+ this.value = -this.value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void abs() {
|
|
|
+ this.value = Math.abs(this.value);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public static class MutableDouble extends MutableNumber implements Comparable<MutableDouble> {
|
|
|
+
|
|
|
+ private static final long serialVersionUID = 2L;
|
|
|
+
|
|
|
+ private double value;
|
|
|
+
|
|
|
+ public MutableDouble(double value) {
|
|
|
+ this.value = value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int intValue() {
|
|
|
+ return (int)value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public long longValue() {
|
|
|
+ return (long)value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public float floatValue() {
|
|
|
+ return (float)value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public double doubleValue() {
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int compareTo(MutableDouble value) {
|
|
|
+ return Double.compare(this.value, value.value);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void set(Number value) {
|
|
|
+ this.value = value.doubleValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ public void set(double value) {
|
|
|
+ this.value = value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void increment() {
|
|
|
+ this.value++;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void decrement() {
|
|
|
+ this.value--;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void add(Number value) {
|
|
|
+ this.value += value.doubleValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void subtract(Number value) {
|
|
|
+ this.value -= value.doubleValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void divide(Number value) {
|
|
|
+ this.value /= value.doubleValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void multiply(Number value) {
|
|
|
+ this.value *= value.doubleValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void pow(Number value) {
|
|
|
+ this.value = Math.pow(this.value, value.doubleValue());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void negate() {
|
|
|
+ this.value = -this.value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void abs() {
|
|
|
+ this.value = Math.abs(this.value);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|