Skip to content

Commit e909078

Browse files
author
linzhijun
committed
迁移 操作符
1 parent 30c5d91 commit e909078

11 files changed

Lines changed: 602 additions & 0 deletions

File tree

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package toolgood.algorithm.internals.functions.operator;
2+
3+
import java.util.List;
4+
import java.util.function.BiFunction;
5+
import toolgood.algorithm.AlgorithmEngine;
6+
import toolgood.algorithm.Operand;
7+
import toolgood.algorithm.enums.OperandType;
8+
import toolgood.algorithm.internals.NoneEngine;
9+
import toolgood.algorithm.internals.ParameterType;
10+
import toolgood.algorithm.internals.functions.FunctionBase;
11+
import toolgood.algorithm.internals.functions.Function_2;
12+
13+
public final class Function_AND extends Function_2 {
14+
15+
public Function_AND(FunctionBase[] funcs) {
16+
super(funcs);
17+
}
18+
19+
public Function_AND(FunctionBase func1, FunctionBase func2) {
20+
super(func1, func2);
21+
}
22+
23+
@Override
24+
public String Name() {
25+
return "And";
26+
}
27+
28+
@Override
29+
public Operand Evaluate(AlgorithmEngine engine, BiFunction<AlgorithmEngine, String, Operand> tempParameter) {
30+
Operand args1 = GetBoolean_1(engine, tempParameter);
31+
if (args1.IsErrorOrNone()) { return args1; }
32+
if (!args1.BooleanValue()) {
33+
Operand args2 = GetBoolean_2(engine, tempParameter);
34+
if (args2.IsErrorOrNone()) { return args2; }
35+
return Operand.False;
36+
}
37+
return GetBoolean_2(engine, tempParameter);
38+
}
39+
40+
@Override
41+
public void ToString(StringBuilder stringBuilder, boolean addBrackets) {
42+
if (addBrackets) stringBuilder.append('(');
43+
func1.ToString(stringBuilder, false);
44+
stringBuilder.append(" && ");
45+
func2.ToString(stringBuilder, false);
46+
if (addBrackets) stringBuilder.append(')');
47+
}
48+
49+
@Override
50+
public OperandType GetResultType() {
51+
return OperandType.BOOLEAN;
52+
}
53+
54+
@Override
55+
void GetParameterTypes(NoneEngine noneEngine, List<ParameterType> result, OperandType operandType, String op, String val) {
56+
func1.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN);
57+
func2.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN);
58+
}
59+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package toolgood.algorithm.internals.functions.operator;
2+
3+
import java.util.List;
4+
import java.util.function.BiFunction;
5+
import toolgood.algorithm.AlgorithmEngine;
6+
import toolgood.algorithm.Operand;
7+
import toolgood.algorithm.enums.OperandType;
8+
import toolgood.algorithm.internals.NoneEngine;
9+
import toolgood.algorithm.internals.ParameterType;
10+
import toolgood.algorithm.internals.functions.FunctionBase;
11+
import toolgood.algorithm.internals.functions.Function_N;
12+
13+
public final class Function_AND_N extends Function_N {
14+
15+
public Function_AND_N(FunctionBase[] funcs) {
16+
super(funcs);
17+
}
18+
19+
@Override
20+
public String Name() {
21+
return "And";
22+
}
23+
24+
@Override
25+
public Operand Evaluate(AlgorithmEngine engine, BiFunction<AlgorithmEngine, String, Operand> tempParameter) {
26+
boolean b = true;
27+
for (int i = 0; i < funcs.length; i++) {
28+
Operand a = GetBoolean(engine, tempParameter, i);
29+
if (a.IsErrorOrNone()) { return a; }
30+
if (!a.BooleanValue()) b = false;
31+
}
32+
return b ? Operand.True : Operand.False;
33+
}
34+
35+
@Override
36+
public OperandType GetResultType() {
37+
return OperandType.BOOLEAN;
38+
}
39+
40+
@Override
41+
void GetParameterTypes(NoneEngine noneEngine, List<ParameterType> result, OperandType operandType, String op, String val) {
42+
for (int i = 0; i < funcs.length; i++) {
43+
funcs[i].GetParameterTypes(noneEngine, result, OperandType.BOOLEAN);
44+
}
45+
}
46+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package toolgood.algorithm.internals.functions.operator;
2+
3+
import java.math.BigDecimal;
4+
import java.util.List;
5+
import java.util.function.BiFunction;
6+
import toolgood.algorithm.AlgorithmEngine;
7+
import toolgood.algorithm.Operand;
8+
import toolgood.algorithm.enums.OperandType;
9+
import toolgood.algorithm.internals.NoneEngine;
10+
import toolgood.algorithm.internals.ParameterType;
11+
import toolgood.algorithm.internals.functions.FunctionBase;
12+
import toolgood.algorithm.internals.functions.Function_2;
13+
14+
public final class Function_Add extends Function_2 {
15+
16+
public Function_Add(FunctionBase[] funcs) {
17+
super(funcs);
18+
}
19+
20+
public Function_Add(FunctionBase func1, FunctionBase func2) {
21+
super(func1, func2);
22+
}
23+
24+
@Override
25+
public String Name() {
26+
return "+";
27+
}
28+
29+
@Override
30+
public Operand Evaluate(AlgorithmEngine engine, BiFunction<AlgorithmEngine, String, Operand> tempParameter) {
31+
Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; }
32+
Operand args2 = GetNumber_2(engine, tempParameter); if (args2.IsErrorOrNone()) { return args2; }
33+
34+
return Operand.Create(args1.NumberValue().add(args2.NumberValue()));
35+
}
36+
37+
@Override
38+
public void ToString(StringBuilder stringBuilder, boolean addBrackets) {
39+
if (addBrackets) stringBuilder.append('(');
40+
func1.ToString(stringBuilder, false);
41+
stringBuilder.append(" + ");
42+
func2.ToString(stringBuilder, false);
43+
if (addBrackets) stringBuilder.append(')');
44+
}
45+
46+
@Override
47+
public OperandType GetResultType() {
48+
return OperandType.NUMBER;
49+
}
50+
51+
@Override
52+
void GetParameterTypes(NoneEngine noneEngine, List<ParameterType> result, OperandType operandType, String op, String val) {
53+
func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER);
54+
func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER);
55+
}
56+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package toolgood.algorithm.internals.functions.operator;
2+
3+
import java.util.List;
4+
import java.util.function.BiFunction;
5+
import toolgood.algorithm.AlgorithmEngine;
6+
import toolgood.algorithm.Operand;
7+
import toolgood.algorithm.enums.OperandType;
8+
import toolgood.algorithm.internals.NoneEngine;
9+
import toolgood.algorithm.internals.ParameterType;
10+
import toolgood.algorithm.internals.functions.FunctionBase;
11+
import toolgood.algorithm.internals.functions.Function_2;
12+
13+
public final class Function_Connect extends Function_2 {
14+
15+
public Function_Connect(FunctionBase[] funcs) {
16+
super(funcs);
17+
}
18+
19+
public Function_Connect(FunctionBase func1, FunctionBase func2) {
20+
super(func1, func2);
21+
}
22+
23+
@Override
24+
public String Name() {
25+
return "&";
26+
}
27+
28+
@Override
29+
public Operand Evaluate(AlgorithmEngine engine, BiFunction<AlgorithmEngine, String, Operand> tempParameter) {
30+
Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; }
31+
Operand args2 = GetText_2(engine, tempParameter); if (args2.IsErrorOrNone()) { return args2; }
32+
33+
return Operand.Create(args1.TextValue() + args2.TextValue());
34+
}
35+
36+
@Override
37+
public void ToString(StringBuilder stringBuilder, boolean addBrackets) {
38+
if (addBrackets) stringBuilder.append('(');
39+
func1.ToString(stringBuilder, false);
40+
stringBuilder.append(" & ");
41+
func2.ToString(stringBuilder, false);
42+
if (addBrackets) stringBuilder.append(')');
43+
}
44+
45+
@Override
46+
public OperandType GetResultType() {
47+
return OperandType.TEXT;
48+
}
49+
50+
@Override
51+
void GetParameterTypes(NoneEngine noneEngine, List<ParameterType> result, OperandType operandType, String op, String val) {
52+
func1.GetParameterTypes(noneEngine, result, OperandType.TEXT);
53+
func2.GetParameterTypes(noneEngine, result, OperandType.TEXT);
54+
}
55+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package toolgood.algorithm.internals.functions.operator;
2+
3+
import java.math.BigDecimal;
4+
import java.math.RoundingMode;
5+
import java.util.List;
6+
import java.util.function.BiFunction;
7+
import toolgood.algorithm.AlgorithmEngine;
8+
import toolgood.algorithm.Operand;
9+
import toolgood.algorithm.enums.OperandType;
10+
import toolgood.algorithm.internals.NoneEngine;
11+
import toolgood.algorithm.internals.ParameterType;
12+
import toolgood.algorithm.internals.functions.FunctionBase;
13+
import toolgood.algorithm.internals.functions.Function_2;
14+
15+
public final class Function_Div extends Function_2 {
16+
17+
public Function_Div(FunctionBase[] funcs) {
18+
super(funcs);
19+
}
20+
21+
public Function_Div(FunctionBase func1, FunctionBase func2) {
22+
super(func1, func2);
23+
}
24+
25+
@Override
26+
public String Name() {
27+
return "/";
28+
}
29+
30+
@Override
31+
public Operand Evaluate(AlgorithmEngine engine, BiFunction<AlgorithmEngine, String, Operand> tempParameter) {
32+
Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; }
33+
Operand args2 = GetNumber_2(engine, tempParameter); if (args2.IsErrorOrNone()) { return args2; }
34+
35+
if (args2.NumberValue().compareTo(BigDecimal.ZERO) == 0) { return Div0Error(); }
36+
if (args2.NumberValue().compareTo(BigDecimal.ONE) == 0) { return args1; }
37+
38+
return Operand.Create(args1.NumberValue().divide(args2.NumberValue(), RoundingMode.HALF_UP));
39+
}
40+
41+
@Override
42+
public void ToString(StringBuilder stringBuilder, boolean addBrackets) {
43+
if (addBrackets) stringBuilder.append('(');
44+
func1.ToString(stringBuilder, true);
45+
stringBuilder.append(" / ");
46+
func2.ToString(stringBuilder, true);
47+
if (addBrackets) stringBuilder.append(')');
48+
}
49+
50+
@Override
51+
public OperandType GetResultType() {
52+
return OperandType.NUMBER;
53+
}
54+
55+
@Override
56+
void GetParameterTypes(NoneEngine noneEngine, List<ParameterType> result, OperandType operandType, String op, String val) {
57+
func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER);
58+
func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER);
59+
}
60+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package toolgood.algorithm.internals.functions.operator;
2+
3+
import java.math.BigDecimal;
4+
import java.util.List;
5+
import java.util.function.BiFunction;
6+
import toolgood.algorithm.AlgorithmEngine;
7+
import toolgood.algorithm.Operand;
8+
import toolgood.algorithm.enums.OperandType;
9+
import toolgood.algorithm.internals.NoneEngine;
10+
import toolgood.algorithm.internals.ParameterType;
11+
import toolgood.algorithm.internals.functions.FunctionBase;
12+
import toolgood.algorithm.internals.functions.Function_2;
13+
14+
public final class Function_Mod extends Function_2 {
15+
16+
public Function_Mod(FunctionBase[] funcs) {
17+
super(funcs);
18+
}
19+
20+
public Function_Mod(FunctionBase func1, FunctionBase func2) {
21+
super(func1, func2);
22+
}
23+
24+
@Override
25+
public String Name() {
26+
return "%";
27+
}
28+
29+
@Override
30+
public Operand Evaluate(AlgorithmEngine engine, BiFunction<AlgorithmEngine, String, Operand> tempParameter) {
31+
Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; }
32+
Operand args2 = GetNumber_2(engine, tempParameter); if (args2.IsErrorOrNone()) { return args2; }
33+
34+
if (args2.NumberValue().compareTo(BigDecimal.ZERO) == 0) { return Div0Error(); }
35+
36+
return Operand.Create(args1.NumberValue().remainder(args2.NumberValue()));
37+
}
38+
39+
@Override
40+
public void ToString(StringBuilder stringBuilder, boolean addBrackets) {
41+
if (addBrackets) stringBuilder.append('(');
42+
func1.ToString(stringBuilder, true);
43+
stringBuilder.append(" % ");
44+
func2.ToString(stringBuilder, true);
45+
if (addBrackets) stringBuilder.append(')');
46+
}
47+
48+
@Override
49+
public OperandType GetResultType() {
50+
return OperandType.NUMBER;
51+
}
52+
53+
@Override
54+
void GetParameterTypes(NoneEngine noneEngine, List<ParameterType> result, OperandType operandType, String op, String val) {
55+
func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER);
56+
func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER);
57+
}
58+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package toolgood.algorithm.internals.functions.operator;
2+
3+
import java.math.BigDecimal;
4+
import java.util.List;
5+
import java.util.function.BiFunction;
6+
import toolgood.algorithm.AlgorithmEngine;
7+
import toolgood.algorithm.Operand;
8+
import toolgood.algorithm.enums.OperandType;
9+
import toolgood.algorithm.internals.NoneEngine;
10+
import toolgood.algorithm.internals.ParameterType;
11+
import toolgood.algorithm.internals.functions.FunctionBase;
12+
import toolgood.algorithm.internals.functions.Function_2;
13+
14+
public final class Function_Mul extends Function_2 {
15+
16+
public Function_Mul(FunctionBase[] funcs) {
17+
super(funcs);
18+
}
19+
20+
public Function_Mul(FunctionBase func1, FunctionBase func2) {
21+
super(func1, func2);
22+
}
23+
24+
@Override
25+
public String Name() {
26+
return "*";
27+
}
28+
29+
@Override
30+
public Operand Evaluate(AlgorithmEngine engine, BiFunction<AlgorithmEngine, String, Operand> tempParameter) {
31+
Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; }
32+
Operand args2 = GetNumber_2(engine, tempParameter); if (args2.IsErrorOrNone()) { return args2; }
33+
34+
if (args1.NumberValue().compareTo(BigDecimal.ONE) == 0) { return args2; }
35+
if (args2.NumberValue().compareTo(BigDecimal.ONE) == 0) { return args1; }
36+
37+
return Operand.Create(args1.NumberValue().multiply(args2.NumberValue()));
38+
}
39+
40+
@Override
41+
public void ToString(StringBuilder stringBuilder, boolean addBrackets) {
42+
if (addBrackets) stringBuilder.append('(');
43+
func1.ToString(stringBuilder, true);
44+
stringBuilder.append(" * ");
45+
func2.ToString(stringBuilder, true);
46+
if (addBrackets) stringBuilder.append(')');
47+
}
48+
49+
@Override
50+
public OperandType GetResultType() {
51+
return OperandType.NUMBER;
52+
}
53+
54+
@Override
55+
void GetParameterTypes(NoneEngine noneEngine, List<ParameterType> result, OperandType operandType, String op, String val) {
56+
func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER);
57+
func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER);
58+
}
59+
}

0 commit comments

Comments
 (0)