Skip to content

Commit c5ac91f

Browse files
author
linzhijun
committed
fix
1 parent 0e5d40b commit c5ac91f

2 files changed

Lines changed: 46 additions & 51 deletions

File tree

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

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -86,24 +86,24 @@ public override void ToString(StringBuilder stringBuilder, bool addBrackets)
8686
}
8787
}
8888

89-
internal class Function_BASE64TOTEXT : Function_N
89+
internal class Function_BASE64TOTEXT : Function_2
9090
{
91-
public Function_BASE64TOTEXT(FunctionBase[] funcs) : base(funcs)
91+
public Function_BASE64TOTEXT(FunctionBase func1, FunctionBase func2) : base(func1, func2)
9292
{
9393
}
9494

9595
public override Operand Calculate(AlgorithmEngine work)
9696
{
97-
var args = new List<Operand>(); int index = 1;
98-
foreach (var item in funcs) { var a = item.Calculate(work).ToText("Function '{0}' parameter {1} is error!", "Base64ToText", index++); if (a.IsError) { return a; } args.Add(a); }
97+
var args1 = func1.Calculate(work); if (args1.Type != OperandType.TEXT) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Base64ToText", 1); if (args1.IsError) return args1; }
9998
try {
10099
Encoding encoding;
101-
if (args.Count == 1) {
100+
if (func2 == null) {
102101
encoding = Encoding.UTF8;
103102
} else {
104-
encoding = Encoding.GetEncoding(args[1].TextValue);
103+
var args2 = func2.Calculate(work); if (args2.Type != OperandType.TEXT) { args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Base64ToText", 2); if (args2.IsError) return args2; }
104+
encoding = Encoding.GetEncoding(args2.TextValue);
105105
}
106-
var t = encoding.GetString(Base64.FromBase64String(args[0].TextValue));
106+
var t = encoding.GetString(Base64.FromBase64String(args1.TextValue));
107107
return Operand.Create(t);
108108
} catch (Exception) { }
109109
return Operand.Error("Function 'Base64ToText' is error!");
@@ -114,24 +114,24 @@ public override void ToString(StringBuilder stringBuilder, bool addBrackets)
114114
}
115115
}
116116

117-
internal class Function_BASE64URLTOTEXT : Function_N
117+
internal class Function_BASE64URLTOTEXT : Function_2
118118
{
119-
public Function_BASE64URLTOTEXT(FunctionBase[] funcs) : base(funcs)
119+
public Function_BASE64URLTOTEXT(FunctionBase func1, FunctionBase func2) : base(func1, func2)
120120
{
121121
}
122122

123123
public override Operand Calculate(AlgorithmEngine work)
124124
{
125-
var args = new List<Operand>(); int index = 1;
126-
foreach (var item in funcs) { var a = item.Calculate(work).ToText("Function '{0}' parameter {1} is error!", "Base64urlToText", index++); if (a.IsError) { return a; } args.Add(a); }
125+
var args1 = func1.Calculate(work); if (args1.Type != OperandType.TEXT) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Base64urlToText", 1); if (args1.IsError) return args1; }
127126
try {
128127
Encoding encoding;
129-
if (args.Count == 1) {
128+
if (func2 == null) {
130129
encoding = Encoding.UTF8;
131130
} else {
132-
encoding = Encoding.GetEncoding(args[1].TextValue);
131+
var args2 = func2.Calculate(work); if (args2.Type != OperandType.TEXT) { args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Base64urlToText", 2); if (args2.IsError) return args2; }
132+
encoding = Encoding.GetEncoding(args2.TextValue);
133133
}
134-
var t = encoding.GetString(Base64.FromBase64ForUrlString(args[0].TextValue));
134+
var t = encoding.GetString(Base64.FromBase64ForUrlString(args1.TextValue));
135135
return Operand.Create(t);
136136
} catch (Exception) { }
137137
return Operand.Error("Function 'Base64urlToText' is error!");
@@ -142,28 +142,27 @@ public override void ToString(StringBuilder stringBuilder, bool addBrackets)
142142
}
143143
}
144144

145-
internal class Function_TEXTTOBASE64 : Function_N
145+
internal class Function_TEXTTOBASE64 : Function_2
146146
{
147-
public Function_TEXTTOBASE64(FunctionBase[] funcs) : base(funcs)
147+
public Function_TEXTTOBASE64(FunctionBase func1, FunctionBase func2) : base(func1, func2)
148148
{
149149
}
150150

151151
public override Operand Calculate(AlgorithmEngine work)
152152
{
153-
var args = new List<Operand>(); int index = 1;
154-
foreach (var item in funcs) { var a = item.Calculate(work).ToText("Function '{0}' parameter {1} is error!", "TextToBase64", index++); if (a.IsError) { return a; } args.Add(a); }
153+
var args1 = func1.Calculate(work); if (args1.Type != OperandType.TEXT) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "TextToBase64", 1); if (args1.IsError) return args1; }
155154
try {
156155
Encoding encoding;
157-
if (args.Count == 1) {
156+
if (func2 == null) {
158157
encoding = Encoding.UTF8;
159158
} else {
160-
encoding = Encoding.GetEncoding(args[1].TextValue);
159+
var args2 = func2.Calculate(work); if (args2.Type != OperandType.TEXT) { args2 = args2.ToText("Function '{0}' parameter {1} is error!", "TextToBase64", 2); if (args2.IsError) return args2; }
160+
encoding = Encoding.GetEncoding(args2.TextValue);
161161
}
162-
var bytes = encoding.GetBytes(args[0].TextValue);
162+
var bytes = encoding.GetBytes(args1.TextValue);
163163
var t = Base64.ToBase64String(bytes);
164164
return Operand.Create(t);
165-
} catch (Exception) {
166-
}
165+
} catch (Exception) { }
167166
return Operand.Error("Function 'TextToBase64' is error!");
168167
}
169168
public override void ToString(StringBuilder stringBuilder, bool addBrackets)
@@ -172,28 +171,28 @@ public override void ToString(StringBuilder stringBuilder, bool addBrackets)
172171
}
173172
}
174173

175-
internal class Function_TEXTTOBASE64URL : Function_N
174+
internal class Function_TEXTTOBASE64URL : Function_2
176175
{
177-
public Function_TEXTTOBASE64URL(FunctionBase[] funcs) : base(funcs)
176+
public Function_TEXTTOBASE64URL(FunctionBase func1, FunctionBase func2) : base(func1, func2)
178177
{
179178
}
180179

181180
public override Operand Calculate(AlgorithmEngine work)
182181
{
183-
var args = new List<Operand>(); int index = 1;
184-
foreach (var item in funcs) { var a = item.Calculate(work).ToText("Function '{0}' parameter {1} is error!", "TextToBase64url", index++); if (a.IsError) { return a; } args.Add(a); }
182+
var args1 = func1.Calculate(work); if (args1.Type != OperandType.TEXT) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "TextToBase64", 1); if (args1.IsError) return args1; }
185183
try {
186184
Encoding encoding;
187-
if (args.Count == 1) {
185+
if (func2 == null) {
188186
encoding = Encoding.UTF8;
189187
} else {
190-
encoding = Encoding.GetEncoding(args[1].TextValue);
188+
var args2 = func2.Calculate(work); if (args2.Type != OperandType.TEXT) { args2 = args2.ToText("Function '{0}' parameter {1} is error!", "TextToBase64", 2); if (args2.IsError) return args2; }
189+
encoding = Encoding.GetEncoding(args2.TextValue);
191190
}
192-
var bytes = encoding.GetBytes(args[0].TextValue);
191+
var bytes = encoding.GetBytes(args1.TextValue);
193192
var t = Base64.ToBase64ForUrlString(bytes);
194193
return Operand.Create(t);
195194
} catch (Exception) { }
196-
return Operand.Error("Function 'TextToBase64url' is error!");
195+
return Operand.Error("Function 'TextToBase64' is error!");
197196
}
198197
public override void ToString(StringBuilder stringBuilder, bool addBrackets)
199198
{

csharp/ToolGood.Algorithm/Internals/MathFunctionVisitor.cs

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1600,41 +1600,37 @@ public FunctionBase VisitHTMLDECODE_fun(mathParser.HTMLDECODE_funContext context
16001600
public FunctionBase VisitBASE64TOTEXT_fun(mathParser.BASE64TOTEXT_funContext context)
16011601
{
16021602
var exprs = context.expr();
1603-
FunctionBase[] args = new FunctionBase[exprs.Length];
1604-
for (int i = 0; i < exprs.Length; i++) {
1605-
args[i] = exprs[i].Accept(this);
1606-
}
1607-
return new Function_BASE64TOTEXT(args);
1603+
var args1 = exprs[0].Accept(this);
1604+
if (exprs.Length == 1) return new Function_BASE64TOTEXT(args1, null);
1605+
var args2 = exprs[1].Accept(this);
1606+
return new Function_BASE64TOTEXT(args1, args2);
16081607
}
16091608

16101609
public FunctionBase VisitBASE64URLTOTEXT_fun(mathParser.BASE64URLTOTEXT_funContext context)
16111610
{
16121611
var exprs = context.expr();
1613-
FunctionBase[] args = new FunctionBase[exprs.Length];
1614-
for (int i = 0; i < exprs.Length; i++) {
1615-
args[i] = exprs[i].Accept(this);
1616-
}
1617-
return new Function_BASE64URLTOTEXT(args);
1612+
var args1 = exprs[0].Accept(this);
1613+
if (exprs.Length == 1) return new Function_BASE64URLTOTEXT(args1, null);
1614+
var args2 = exprs[1].Accept(this);
1615+
return new Function_BASE64URLTOTEXT(args1, args2);
16181616
}
16191617

16201618
public FunctionBase VisitTEXTTOBASE64_fun(mathParser.TEXTTOBASE64_funContext context)
16211619
{
16221620
var exprs = context.expr();
1623-
FunctionBase[] args = new FunctionBase[exprs.Length];
1624-
for (int i = 0; i < exprs.Length; i++) {
1625-
args[i] = exprs[i].Accept(this);
1626-
}
1627-
return new Function_TEXTTOBASE64(args);
1621+
var args1 = exprs[0].Accept(this);
1622+
if (exprs.Length == 1) return new Function_TEXTTOBASE64(args1, null);
1623+
var args2 = exprs[1].Accept(this);
1624+
return new Function_TEXTTOBASE64(args1, args2);
16281625
}
16291626

16301627
public FunctionBase VisitTEXTTOBASE64URL_fun(mathParser.TEXTTOBASE64URL_funContext context)
16311628
{
16321629
var exprs = context.expr();
1633-
FunctionBase[] args = new FunctionBase[exprs.Length];
1634-
for (int i = 0; i < exprs.Length; i++) {
1635-
args[i] = exprs[i].Accept(this);
1636-
}
1637-
return new Function_TEXTTOBASE64URL(args);
1630+
var args1 = exprs[0].Accept(this);
1631+
if (exprs.Length == 1) return new Function_TEXTTOBASE64URL(args1, null);
1632+
var args2 = exprs[1].Accept(this);
1633+
return new Function_TEXTTOBASE64URL(args1, args2);
16381634
}
16391635

16401636
public FunctionBase VisitREGEX_fun(mathParser.REGEX_funContext context)

0 commit comments

Comments
 (0)