FusionCalculator/src/Expressions/OperatorExpression.fu
2023-12-22 22:43:02 +06:00

51 lines
1.4 KiB
Plaintext

abstract class OperatorExpression : IExpression {
IExpression A;
IExpression B;
internal void Init!(IExpression a, IExpression b) {
A = a;
B = b;
}
internal abstract double OperatorImplementation(double a, double b);
internal override double Calculate() => OperatorImplementation(A.Calculate(), B.Calculate());
}
class OperatorExpressionAdd : OperatorExpression {
internal override double OperatorImplementation(double a, double b) => a+b;
}
class OperatorExpressionSub : OperatorExpression {
internal override double OperatorImplementation(double a, double b) => a-b;
}
class OperatorExpressionMul : OperatorExpression {
internal override double OperatorImplementation(double a, double b) => a*b;
}
class OperatorExpressionDiv : OperatorExpression {
internal override double OperatorImplementation(double a, double b) => a/b;
}
class OperatorExpressionMod : OperatorExpression {
// returns if b>0 then returns a%b else returns a
internal override double OperatorImplementation(double a, double b) {
if(b <= 0)
return a;
if(a > 0){
while(a >= b)
a -= b;
}
else {
while(a <= b)
a += b;
}
return a;
}
}
class OperatorExpressionPow : OperatorExpression {
internal override double OperatorImplementation(double a, double b) => Math.Pow(a, b);
}