Skip to content

Commit 4249e0c

Browse files
author
linzhijun
committed
fix
1 parent 01ea0ad commit 4249e0c

File tree

2 files changed

+67
-100
lines changed

2 files changed

+67
-100
lines changed

csharp/ToolGood.Algorithm/Internals/Functions/FunctionBase.math.cs

Lines changed: 39 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -613,10 +613,10 @@ public Function_BIN2OCT(FunctionBase func1, FunctionBase func2) : base(func1, fu
613613
public override Operand Calculate(AlgorithmEngine work)
614614
{
615615
var args1 = func1.Calculate(work); if (args1.Type != OperandType.TEXT) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "BIN2OCT", 1); if (args1.IsError) { return args1; } }
616-
616+
617617
if (Regex.IsMatch(args1.TextValue, "^[01]+$", RegexOptions.Compiled) == false) { return Operand.Error("Function '{0}' parameter {1} is error!", "BIN2OCT", 1); }
618618
var num = Convert.ToString(Convert.ToInt32(args1.TextValue, 2), 8);
619-
if (func2!=null) {
619+
if (func2 != null) {
620620
var args2 = func2.Calculate(work); if (args2.Type != OperandType.NUMBER) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BIN2OCT", 2); if (args2.IsError) { return args2; } }
621621
if (num.Length > args2.IntValue) {
622622
return Operand.Create(num.PadLeft(args2.IntValue, '0'));
@@ -679,23 +679,19 @@ public override void ToString(StringBuilder stringBuilder, bool addBrackets)
679679
}
680680
}
681681

682-
internal class Function_OCT2BIN : Function_N
682+
internal class Function_OCT2BIN : Function_2
683683
{
684-
public Function_OCT2BIN(FunctionBase[] funcs) : base(funcs)
684+
public Function_OCT2BIN(FunctionBase func1, FunctionBase func2) : base(func1, func2)
685685
{
686686
}
687687

688688
public override Operand Calculate(AlgorithmEngine work)
689689
{
690-
var args = new List<Operand>();
691-
foreach (var item in funcs) { var aa = item.Calculate(work); if (aa.IsError) { return aa; } args.Add(aa); }
692-
var args1 = args[0].ToText("Function '{0}' parameter {1} is error!", "OCT2BIN", 1);
693-
if (args1.IsError) { return args1; }
690+
var args1 = func1.Calculate(work); if (args1.Type != OperandType.TEXT) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "OCT2BIN", 1); if (args1.IsError) { return args1; } }
694691
if (Regex.IsMatch(args1.TextValue, "^[0-7]+$", RegexOptions.Compiled) == false) { return Operand.Error("Function '{0}' parameter {1} is error!", "OCT2BIN", 1); }
695692
var num = Convert.ToString(Convert.ToInt32(args1.TextValue, 8), 2);
696-
if (args.Count == 2) {
697-
var args2 = args[1].ToNumber("Function '{0}' parameter {1} is error!", "OCT2BIN", 2);
698-
if (args2.IsError) { return args2; }
693+
if (func2 != null) {
694+
var args2 = func2.Calculate(work); if (args2.Type != OperandType.NUMBER) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "OCT2BIN", 2); if (args2.IsError) { return args2; } }
699695
if (num.Length > args2.IntValue) {
700696
return Operand.Create(num.PadLeft(args2.IntValue, '0'));
701697
}
@@ -729,23 +725,20 @@ public override void ToString(StringBuilder stringBuilder, bool addBrackets)
729725
}
730726
}
731727

732-
internal class Function_OCT2HEX : Function_N
728+
internal class Function_OCT2HEX : Function_2
733729
{
734-
public Function_OCT2HEX(FunctionBase[] funcs) : base(funcs)
730+
public Function_OCT2HEX(FunctionBase func1, FunctionBase func2) : base(func1, func2)
735731
{
736732
}
737733

738734
public override Operand Calculate(AlgorithmEngine work)
739735
{
740-
var args = new List<Operand>();
741-
foreach (var item in funcs) { var aa = item.Calculate(work); if (aa.IsError) { return aa; } args.Add(aa); }
742-
var args1 = args[0].ToText("Function '{0}' parameter {1} is error!", "OCT2HEX", 1);
743-
if (args1.IsError) { return args1; }
736+
var args1 = func1.Calculate(work); if (args1.Type != OperandType.TEXT) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "OCT2HEX", 1); if (args1.IsError) { return args1; } }
737+
744738
if (Regex.IsMatch(args1.TextValue, "^[0-7]+$", RegexOptions.Compiled) == false) { return Operand.Error("Function '{0}' parameter {1} is error!", "OCT2HEX", 1); }
745739
var num = Convert.ToString(Convert.ToInt32(args1.TextValue, 8), 16).ToUpper();
746-
if (args.Count == 2) {
747-
var args2 = args[1].ToNumber("Function '{0}' parameter {1} is error!", "OCT2HEX", 2);
748-
if (args2.IsError) { return args2; }
740+
if (func2 != null) {
741+
var args2 = func2.Calculate(work); if (args2.Type != OperandType.NUMBER) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "OCT2HEX", 2); if (args2.IsError) { return args2; } }
749742
if (num.Length > args2.IntValue) {
750743
return Operand.Create(num.PadLeft(args2.IntValue, '0'));
751744
}
@@ -759,23 +752,20 @@ public override void ToString(StringBuilder stringBuilder, bool addBrackets)
759752
}
760753
}
761754

762-
internal class Function_HEX2BIN : Function_N
755+
internal class Function_HEX2BIN : Function_2
763756
{
764-
public Function_HEX2BIN(FunctionBase[] funcs) : base(funcs)
757+
public Function_HEX2BIN(FunctionBase func1, FunctionBase func2) : base(func1, func2)
765758
{
766759
}
767760

768761
public override Operand Calculate(AlgorithmEngine work)
769762
{
770-
var args = new List<Operand>();
771-
foreach (var item in funcs) { var aa = item.Calculate(work); if (aa.IsError) { return aa; } args.Add(aa); }
772-
var args1 = args[0].ToText("Function '{0}' parameter {1} is error!", "HEX2BIN", 1);
773-
if (args1.IsError) { return args1; }
763+
var args1 = func1.Calculate(work); if (args1.Type != OperandType.TEXT) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HEX2BIN", 1); if (args1.IsError) { return args1; } }
764+
774765
if (Regex.IsMatch(args1.TextValue, "^[0-9A-Fa-f]+$", RegexOptions.Compiled) == false) { return Operand.Error("Function '{0}' parameter {1} is error!", "HEX2BIN", 1); }
775766
var num = Convert.ToString(Convert.ToInt32(args1.TextValue, 16), 2);
776-
if (args.Count == 2) {
777-
var args2 = args[1].ToNumber("Function '{0}' parameter {1} is error!", "HEX2BIN", 2);
778-
if (args2.IsError) { return args2; }
767+
if (func2 != null) {
768+
var args2 = func2.Calculate(work); if (args2.Type != OperandType.NUMBER) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "HEX2BIN", 2); if (args2.IsError) { return args2; } }
779769
if (num.Length > args2.IntValue) {
780770
return Operand.Create(num.PadLeft(args2.IntValue, '0'));
781771
}
@@ -809,23 +799,19 @@ public override void ToString(StringBuilder stringBuilder, bool addBrackets)
809799
}
810800
}
811801

812-
internal class Function_HEX2OCT : Function_N
802+
internal class Function_HEX2OCT : Function_2
813803
{
814-
public Function_HEX2OCT(FunctionBase[] funcs) : base(funcs)
804+
public Function_HEX2OCT(FunctionBase func1, FunctionBase func2) : base(func1, func2)
815805
{
816806
}
817807

818808
public override Operand Calculate(AlgorithmEngine work)
819809
{
820-
var args = new List<Operand>();
821-
foreach (var item in funcs) { var aa = item.Calculate(work); if (aa.IsError) { return aa; } args.Add(aa); }
822-
var args1 = args[0].ToText("Function '{0}' parameter {1} is error!", "HEX2OCT", 1);
823-
if (args1.IsError) { return args1; }
810+
var args1 = func1.Calculate(work); if (args1.Type != OperandType.TEXT) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HEX2OCT", 1); if (args1.IsError) { return args1; } }
824811
if (Regex.IsMatch(args1.TextValue, "^[0-9A-Fa-f]+$", RegexOptions.Compiled) == false) { return Operand.Error("Function '{0}' parameter {1} is error!", "HEX2OCT", 1); }
825812
var num = Convert.ToString(Convert.ToInt32(args1.TextValue, 16), 8);
826-
if (args.Count == 2) {
827-
var args2 = args[1].ToNumber("Function '{0}' parameter {1} is error!", "HEX2OCT", 2);
828-
if (args2.IsError) { return args2; }
813+
if (func2 != null) {
814+
var args2 = func2.Calculate(work); if (args2.Type != OperandType.NUMBER) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "HEX2OCT", 2); if (args2.IsError) { return args2; } }
829815
if (num.Length > args2.IntValue) {
830816
return Operand.Create(num.PadLeft(args2.IntValue, '0'));
831817
}
@@ -839,22 +825,18 @@ public override void ToString(StringBuilder stringBuilder, bool addBrackets)
839825
}
840826
}
841827

842-
internal class Function_DEC2BIN : Function_N
828+
internal class Function_DEC2BIN : Function_2
843829
{
844-
public Function_DEC2BIN(FunctionBase[] funcs) : base(funcs)
830+
public Function_DEC2BIN(FunctionBase func1, FunctionBase func2) : base(func1, func2)
845831
{
846832
}
847833

848834
public override Operand Calculate(AlgorithmEngine work)
849835
{
850-
var args = new List<Operand>();
851-
foreach (var item in funcs) { var aa = item.Calculate(work); if (aa.IsError) { return aa; } args.Add(aa); }
852-
var args1 = args[0].ToNumber("Function '{0}' parameter {1} is error!", "DEC2BIN", 1);
853-
if (args1.IsError) { return args1; }
836+
var args1 = func1.Calculate(work); if (args1.Type != OperandType.NUMBER) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2BIN", 1); if (args1.IsError) { return args1; } }
854837
var num = Convert.ToString(args1.IntValue, 2);
855-
if (args.Count == 2) {
856-
var args2 = args[1].ToNumber("Function '{0}' parameter {1} is error!", "DEC2BIN", 2);
857-
if (args2.IsError) { return args2; }
838+
if (func2 != null) {
839+
var args2 = func2.Calculate(work); if (args2.Type != OperandType.NUMBER) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "DEC2BIN", 2); if (args2.IsError) { return args2; } }
858840
if (num.Length > args2.IntValue) {
859841
return Operand.Create(num.PadLeft(args2.IntValue, '0'));
860842
}
@@ -868,22 +850,18 @@ public override void ToString(StringBuilder stringBuilder, bool addBrackets)
868850
}
869851
}
870852

871-
internal class Function_DEC2OCT : Function_N
853+
internal class Function_DEC2OCT : Function_2
872854
{
873-
public Function_DEC2OCT(FunctionBase[] funcs) : base(funcs)
855+
public Function_DEC2OCT(FunctionBase func1, FunctionBase func2) : base(func1, func2)
874856
{
875857
}
876858

877859
public override Operand Calculate(AlgorithmEngine work)
878860
{
879-
var args = new List<Operand>();
880-
foreach (var item in funcs) { var aa = item.Calculate(work); if (aa.IsError) { return aa; } args.Add(aa); }
881-
var args1 = args[0].ToNumber("Function '{0}' parameter {1} is error!", "DEC2OCT", 1);
882-
if (args1.IsError) { return args1; }
861+
var args1 = func1.Calculate(work); if (args1.Type != OperandType.NUMBER) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2OCT", 1); if (args1.IsError) { return args1; } }
883862
var num = Convert.ToString(args1.IntValue, 8);
884-
if (args.Count == 2) {
885-
var args2 = args[1].ToNumber("Function '{0}' parameter {1} is error!", "DEC2OCT", 2);
886-
if (args2.IsError) { return args2; }
863+
if (func2 != null) {
864+
var args2 = func2.Calculate(work); if (args2.Type != OperandType.NUMBER) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "DEC2OCT", 2); if (args2.IsError) { return args2; } }
887865
if (num.Length > args2.IntValue) {
888866
return Operand.Create(num.PadLeft(args2.IntValue, '0'));
889867
}
@@ -897,22 +875,18 @@ public override void ToString(StringBuilder stringBuilder, bool addBrackets)
897875
}
898876
}
899877

900-
internal class Function_DEC2HEX : Function_N
878+
internal class Function_DEC2HEX : Function_2
901879
{
902-
public Function_DEC2HEX(FunctionBase[] funcs) : base(funcs)
880+
public Function_DEC2HEX(FunctionBase func1, FunctionBase func2) : base(func1, func2)
903881
{
904882
}
905883

906884
public override Operand Calculate(AlgorithmEngine work)
907885
{
908-
var args = new List<Operand>();
909-
foreach (var item in funcs) { var aa = item.Calculate(work); if (aa.IsError) { return aa; } args.Add(aa); }
910-
var args1 = args[0].ToNumber("Function '{0}' parameter {1} is error!", "DEC2HEX", 1);
911-
if (args1.IsError) { return args1; }
886+
var args1 = func1.Calculate(work); if (args1.Type != OperandType.NUMBER) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2HEX", 1); if (args1.IsError) { return args1; } }
912887
var num = Convert.ToString(args1.IntValue, 16).ToUpper();
913-
if (args.Count == 2) {
914-
var args2 = args[1].ToNumber("Function '{0}' parameter {1} is error!", "DEC2HEX", 2);
915-
if (args2.IsError) { return args2; }
888+
if (func2 != null) {
889+
var args2 = func2.Calculate(work); if (args2.Type != OperandType.NUMBER) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "DEC2HEX", 2); if (args2.IsError) { return args2; } }
916890
if (num.Length > args2.IntValue) {
917891
return Operand.Create(num.PadLeft(args2.IntValue, '0'));
918892
}

csharp/ToolGood.Algorithm/Internals/MathFunctionVisitor.cs

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -449,11 +449,10 @@ public FunctionBase VisitBIN2HEX_fun(mathParser.BIN2HEX_funContext context)
449449
public FunctionBase VisitOCT2BIN_fun(mathParser.OCT2BIN_funContext context)
450450
{
451451
var exprs = context.expr();
452-
FunctionBase[] args = new FunctionBase[exprs.Length];
453-
for (int i = 0; i < exprs.Length; i++) {
454-
args[i] = exprs[i].Accept(this);
455-
}
456-
return new Function_OCT2BIN(args);
452+
var args1 = exprs[0].Accept(this);
453+
if (exprs.Length == 1) return new Function_OCT2BIN(args1, null);
454+
var args2 = exprs[1].Accept(this);
455+
return new Function_OCT2BIN(args1, args2);
457456
}
458457

459458
public FunctionBase VisitOCT2DEC_fun(mathParser.OCT2DEC_funContext context)
@@ -465,61 +464,55 @@ public FunctionBase VisitOCT2DEC_fun(mathParser.OCT2DEC_funContext context)
465464
public FunctionBase VisitOCT2HEX_fun(mathParser.OCT2HEX_funContext context)
466465
{
467466
var exprs = context.expr();
468-
FunctionBase[] args = new FunctionBase[exprs.Length];
469-
for (int i = 0; i < exprs.Length; i++) {
470-
args[i] = exprs[i].Accept(this);
471-
}
472-
return new Function_OCT2HEX(args);
467+
var args1 = exprs[0].Accept(this);
468+
if (exprs.Length == 1) return new Function_OCT2HEX(args1, null);
469+
var args2 = exprs[1].Accept(this);
470+
return new Function_OCT2HEX(args1, args2);
473471
}
474472

475473
public FunctionBase VisitDEC2BIN_fun(mathParser.DEC2BIN_funContext context)
476474
{
477475
var exprs = context.expr();
478-
FunctionBase[] args = new FunctionBase[exprs.Length];
479-
for (int i = 0; i < exprs.Length; i++) {
480-
args[i] = exprs[i].Accept(this);
481-
}
482-
return new Function_DEC2BIN(args);
476+
var args1 = exprs[0].Accept(this);
477+
if (exprs.Length == 1) return new Function_DEC2BIN(args1, null);
478+
var args2 = exprs[1].Accept(this);
479+
return new Function_DEC2BIN(args1, args2);
483480
}
484481

485482
public FunctionBase VisitDEC2OCT_fun(mathParser.DEC2OCT_funContext context)
486483
{
487484
var exprs = context.expr();
488-
FunctionBase[] args = new FunctionBase[exprs.Length];
489-
for (int i = 0; i < exprs.Length; i++) {
490-
args[i] = exprs[i].Accept(this);
491-
}
492-
return new Function_DEC2OCT(args);
485+
var args1 = exprs[0].Accept(this);
486+
if (exprs.Length == 1) return new Function_DEC2OCT(args1, null);
487+
var args2 = exprs[1].Accept(this);
488+
return new Function_DEC2OCT(args1, args2);
493489
}
494490

495491
public FunctionBase VisitDEC2HEX_fun(mathParser.DEC2HEX_funContext context)
496492
{
497493
var exprs = context.expr();
498-
FunctionBase[] args = new FunctionBase[exprs.Length];
499-
for (int i = 0; i < exprs.Length; i++) {
500-
args[i] = exprs[i].Accept(this);
501-
}
502-
return new Function_DEC2HEX(args);
494+
var args1 = exprs[0].Accept(this);
495+
if (exprs.Length == 1) return new Function_DEC2HEX(args1, null);
496+
var args2 = exprs[1].Accept(this);
497+
return new Function_DEC2HEX(args1, args2);
503498
}
504499

505500
public FunctionBase VisitHEX2BIN_fun(mathParser.HEX2BIN_funContext context)
506501
{
507502
var exprs = context.expr();
508-
FunctionBase[] args = new FunctionBase[exprs.Length];
509-
for (int i = 0; i < exprs.Length; i++) {
510-
args[i] = exprs[i].Accept(this);
511-
}
512-
return new Function_HEX2BIN(args);
503+
var args1 = exprs[0].Accept(this);
504+
if (exprs.Length == 1) return new Function_HEX2BIN(args1, null);
505+
var args2 = exprs[1].Accept(this);
506+
return new Function_HEX2BIN(args1, args2);
513507
}
514508

515509
public FunctionBase VisitHEX2OCT_fun(mathParser.HEX2OCT_funContext context)
516510
{
517511
var exprs = context.expr();
518-
FunctionBase[] args = new FunctionBase[exprs.Length];
519-
for (int i = 0; i < exprs.Length; i++) {
520-
args[i] = exprs[i].Accept(this);
521-
}
522-
return new Function_HEX2OCT(args);
512+
var args1 = exprs[0].Accept(this);
513+
if (exprs.Length == 1) return new Function_HEX2OCT(args1, null);
514+
var args2 = exprs[1].Accept(this);
515+
return new Function_HEX2OCT(args1, args2);
523516
}
524517

525518
public FunctionBase VisitHEX2DEC_fun(mathParser.HEX2DEC_funContext context)

0 commit comments

Comments
 (0)