123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- using System;
- using System.Text;
-
- namespace Unity.VisualScripting.Dependencies.NCalc
- {
- public abstract class LogicalExpression
- {
- public BinaryExpression And(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.And, this, operand);
- }
-
- public BinaryExpression And(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.And, this, new ValueExpression(operand));
- }
-
- public BinaryExpression DividedBy(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.Div, this, operand);
- }
-
- public BinaryExpression DividedBy(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.Div, this, new ValueExpression(operand));
- }
-
- public BinaryExpression EqualsTo(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.Equal, this, operand);
- }
-
- public BinaryExpression EqualsTo(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.Equal, this, new ValueExpression(operand));
- }
-
- public BinaryExpression GreaterThan(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.Greater, this, operand);
- }
-
- public BinaryExpression GreaterThan(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.Greater, this, new ValueExpression(operand));
- }
-
- public BinaryExpression GreaterOrEqualThan(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.GreaterOrEqual, this, operand);
- }
-
- public BinaryExpression GreaterOrEqualThan(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.GreaterOrEqual, this, new ValueExpression(operand));
- }
-
- public BinaryExpression LesserThan(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.Lesser, this, operand);
- }
-
- public BinaryExpression LesserThan(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.Lesser, this, new ValueExpression(operand));
- }
-
- public BinaryExpression LesserOrEqualThan(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.LesserOrEqual, this, operand);
- }
-
- public BinaryExpression LesserOrEqualThan(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.LesserOrEqual, this, new ValueExpression(operand));
- }
-
- public BinaryExpression Minus(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.Minus, this, operand);
- }
-
- public BinaryExpression Minus(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.Minus, this, new ValueExpression(operand));
- }
-
- public BinaryExpression Modulo(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.Modulo, this, operand);
- }
-
- public BinaryExpression Modulo(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.Modulo, this, new ValueExpression(operand));
- }
-
- public BinaryExpression NotEqual(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.NotEqual, this, operand);
- }
-
- public BinaryExpression NotEqual(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.NotEqual, this, new ValueExpression(operand));
- }
-
- public BinaryExpression Or(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.Or, this, operand);
- }
-
- public BinaryExpression Or(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.Or, this, new ValueExpression(operand));
- }
-
- public BinaryExpression Plus(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.Plus, this, operand);
- }
-
- public BinaryExpression Plus(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.Plus, this, new ValueExpression(operand));
- }
-
- public BinaryExpression Mult(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.Times, this, operand);
- }
-
- public BinaryExpression Mult(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.Times, this, new ValueExpression(operand));
- }
-
- public BinaryExpression BitwiseOr(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.BitwiseOr, this, operand);
- }
-
- public BinaryExpression BitwiseOr(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.BitwiseOr, this, new ValueExpression(operand));
- }
-
- public BinaryExpression BitwiseAnd(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.BitwiseAnd, this, operand);
- }
-
- public BinaryExpression BitwiseAnd(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.BitwiseAnd, this, new ValueExpression(operand));
- }
-
- public BinaryExpression BitwiseXOr(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.BitwiseXOr, this, operand);
- }
-
- public BinaryExpression BitwiseXOr(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.BitwiseXOr, this, new ValueExpression(operand));
- }
-
- public BinaryExpression LeftShift(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.LeftShift, this, operand);
- }
-
- public BinaryExpression LeftShift(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.LeftShift, this, new ValueExpression(operand));
- }
-
- public BinaryExpression RightShift(LogicalExpression operand)
- {
- return new BinaryExpression(BinaryExpressionType.RightShift, this, operand);
- }
-
- public BinaryExpression RightShift(object operand)
- {
- return new BinaryExpression(BinaryExpressionType.RightShift, this, new ValueExpression(operand));
- }
-
- public override string ToString()
- {
- var serializer = new SerializationVisitor();
-
- Accept(serializer);
-
- return serializer.Result.ToString().TrimEnd(' ');
- }
-
- // This method is not just syntactic sugar.
- // It chooses the proper overload of Visit() based on the current type.
- public virtual void Accept(LogicalExpressionVisitor visitor)
- {
- throw new NotImplementedException();
- }
-
- private const char BS = '\\';
-
- private static string ExtractString(string text)
- {
- var sb = new StringBuilder(text);
- var startIndex = 1; // Skip initial quote
- var slashIndex = -1;
-
- while ((slashIndex = sb.ToString().IndexOf(BS, startIndex)) != -1)
- {
- var escapeType = sb[slashIndex + 1];
-
- switch (escapeType)
- {
- case 'u':
- var hcode = String.Concat(sb[slashIndex + 4], sb[slashIndex + 5]);
- var lcode = String.Concat(sb[slashIndex + 2], sb[slashIndex + 3]);
- var unicodeChar = Encoding.Unicode.GetChars(new[] { Convert.ToByte(hcode, 16), Convert.ToByte(lcode, 16) })[0];
- sb.Remove(slashIndex, 6).Insert(slashIndex, unicodeChar);
- break;
-
- case 'n':
- sb.Remove(slashIndex, 2).Insert(slashIndex, '\n');
- break;
-
- case 'r':
- sb.Remove(slashIndex, 2).Insert(slashIndex, '\r');
- break;
-
- case 't':
- sb.Remove(slashIndex, 2).Insert(slashIndex, '\t');
- break;
-
- case '\'':
- sb.Remove(slashIndex, 2).Insert(slashIndex, '\'');
- break;
-
- case '\\':
- sb.Remove(slashIndex, 2).Insert(slashIndex, '\\');
- break;
-
- default:
- throw new ApplicationException("Unvalid escape sequence: \\" + escapeType);
- }
-
- startIndex = slashIndex + 1;
- }
-
- sb.Remove(0, 1);
- sb.Remove(sb.Length - 1, 1);
-
- return sb.ToString();
- }
- }
- }
|