An error occurred while loading the file. Please try again.
-
BigBig_Zhe authored78f323f2
package entities;
public class FOI {
public static final FOI ZERO = new FOI(0), ONE = new FOI(1);
private int a;
private float b;
private boolean isInteger;
public FOI(int a) {
this.a = a;
isInteger = true;
}
public FOI(float b) {
this.b = b;
isInteger = false;
}
public FOI copy() {
return isInteger ? new FOI(a) : new FOI(b);
}
public int getInt() {
return isInteger ? a : (int) Math.floor(b);
}
public float getFloat() {
return isInteger ? (float) a : b;
}
public static FOI add_(FOI a, FOI b) {
if (a.isInteger && b.isInteger) {
return new FOI(a.getInt() + b.getInt());
}
return new FOI(a.getFloat() + b.getFloat());
}
public void add(FOI other) {
if (isInteger && other.isInteger) {
a += other.a;
} else if (!isInteger && !other.isInteger) {
b += other.b;
} else {
b = getFloat() + other.getFloat();
isInteger = false;
}
}
public static FOI sub_(FOI a, FOI b) {
if (a.isInteger && b.isInteger) {
return new FOI(a.getInt() - b.getInt());
}
return new FOI(a.getFloat() - b.getFloat());
}
public void sub(FOI other) {
if (isInteger && other.isInteger) {
a -= other.a;
} else if (!isInteger && !other.isInteger) {
b -= other.b;
} else {
b = getFloat() - other.getFloat();
isInteger = false;
}
}
public static FOI mul_(FOI a, FOI b) {
if (a.isInteger && b.isInteger) {
return new FOI(a.getInt() * b.getInt());
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
}
return new FOI(a.getFloat() * b.getFloat());
}
public void mul(FOI other) {
if (isInteger && other.isInteger) {
a *= other.a;
} else if (!isInteger && !other.isInteger) {
b *= other.b;
} else {
b = getFloat() * other.getFloat();
isInteger = false;
}
}
public static FOI div_(FOI a, FOI b) {
if (a.isInteger && b.isInteger) {
return new FOI(a.getInt() / b.getInt());
}
return new FOI(a.getFloat() / b.getFloat());
}
public void div(FOI other) {
if (isInteger && other.isInteger) {
a /= other.a;
} else if (!isInteger && !other.isInteger) {
b /= other.b;
} else {
b = getFloat() / other.getFloat();
isInteger = false;
}
}
public static FOI mod_(FOI a, FOI b) {
return new FOI(a.getInt() % b.getInt());
}
public void mod(FOI other) {
if (isInteger && other.isInteger) {
a %= other.a;
} else {
a = getInt() % other.getInt();
isInteger = true;
}
}
public FOI neg() {
if (isInteger) {
a = -a;
} else {
b = -b;
}
return this;
}
public static FOI lt(FOI a, FOI b) {
if (a.isInteger && b.isInteger) {
return a.getInt() < b.getInt() ? FOI.ONE : FOI.ZERO;
}
return a.getFloat() < b.getFloat() ? FOI.ONE : FOI.ZERO;
}
public static FOI le(FOI a, FOI b) {
if (a.isInteger && b.isInteger) {
return a.getInt() <= b.getInt() ? FOI.ONE : FOI.ZERO;
}
return a.getFloat() <= b.getFloat() ? FOI.ONE : FOI.ZERO;
}
public static FOI gt(FOI a, FOI b) {
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
if (a.isInteger && b.isInteger) {
return a.getInt() > b.getInt() ? FOI.ONE : FOI.ZERO;
}
return a.getFloat() > b.getFloat() ? FOI.ONE : FOI.ZERO;
}
public static FOI ge(FOI a, FOI b) {
if (a.isInteger && b.isInteger) {
return a.getInt() >= b.getInt() ? FOI.ONE : FOI.ZERO;
}
return a.getFloat() >= b.getFloat() ? FOI.ONE : FOI.ZERO;
}
public static FOI eq(FOI a, FOI b) {
if (a.isInteger && b.isInteger) {
return a.getInt() == b.getInt() ? FOI.ONE : FOI.ZERO;
}
return a.getFloat() == b.getFloat() ? FOI.ONE : FOI.ZERO;
}
public static FOI ne(FOI a, FOI b) {
if (a.isInteger && b.isInteger) {
return a.getInt() != b.getInt() ? FOI.ONE : FOI.ZERO;
}
return a.getFloat() != b.getFloat() ? FOI.ONE : FOI.ZERO;
}
public FOI toFloat() {
if (isInteger) {
b = a;
isInteger = false;
}
return this;
}
public FOI toInt() {
if (!isInteger) {
a = (int) Math.floor(b);
isInteger = true;
}
return this;
}
public boolean isInteger() {
return isInteger;
}
@Override
public String toString() {
if (isInteger) {
return "I="+a;
} else {
return "F="+b;
}
}
}