protected override void ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic) { Expr1.ToString(sb, dic); if (IsNot) { sb.Append(" NOT"); } switch (Kind) { case SearchKind.StartsWith: sb.Append(" STARTS_WITH "); break; case SearchKind.EndsWith: sb.Append(" ENDS_WITH "); break; case SearchKind.Contains: sb.Append(" CONTAINS "); break; default: throw new InvalidOperationException($"Unexpected search kind: {Kind}"); } Expr2.ToString(sb, dic); }
protected override void ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic) { Expr1.ToString(sb, dic); if (IsNot) { sb.Append(" NOT"); } switch (Kind) { case SearchKind.StartsWith: sb.Append(" STARTS_WITH "); break; case SearchKind.EndsWith: sb.Append(" ENS_WITH "); break; case SearchKind.Contains: sb.Append(" CONTAINS "); break; default: throw new ArgumentOutOfRangeException(); } Expr2.ToString(sb, dic); }
protected override void Walk(WalkOptions options, Func <ISqlExpression, ISqlExpression> func) { base.Walk(options, func); Expr2 = Expr2.Walk(options, func) !; Escape = Escape?.Walk(options, func); }
protected override void Walk <TContext>(WalkOptions options, TContext context, Func <TContext, ISqlExpression, ISqlExpression> func) { base.Walk(options, context, func); Expr2 = Expr2.Walk(options, context, func) !; Escape = Escape?.Walk(options, context, func); }
ISqlExpression ISqlExpressionWalkable.Walk(bool skipColumns, Func <ISqlExpression, ISqlExpression> func) { Expr1 = Expr1.Walk(skipColumns, func); Expr2 = Expr2.Walk(skipColumns, func); return(func(this)); }
ISqlExpression ISqlExpressionWalkable.Walk(WalkOptions options, Func <ISqlExpression, ISqlExpression> func) { Expr1 = Expr1.Walk(options, func) !; Expr2 = Expr2.Walk(options, func) !; return(func(this)); }
protected override void Walk(bool skipColumns, Func <IQueryExpression, IQueryExpression> func) { base.Walk(skipColumns, func); Expr2 = Expr2.Walk(skipColumns, func); Escape = Escape?.Walk(skipColumns, func); }
public Tuple(KaitaiStream p__io, Expr2.ModStr p__parent = null, Expr2 p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; f_avg = false; _read(); }
public override void Jumping(int t, int f) { var a = Expr1.Reduce(); var b = Expr2.Reduce(); var test = a + " " + Op + " " + b; EmitJumps(test, t, f); }
public IFormType BuildForm(ITypeEnvironment env) { IFormType a = Expr1.BuildForm(env); IFormType b = Expr2.BuildForm(env); IFormType type = a.GetLeastUpperBound(b); return(type); }
public override void UpdatePlacements(ref int actx, int acty, ref int linehi) { AndLabel.Visible = true; Expr1.UpdatePlacement(ref actx, acty); AndLabel.Left = actx; AndLabel.Top = acty; actx += AndLabel.Width; Expr2.UpdatePlacement(ref actx, acty); }
public IEnumerable <Inline> BuildDocument() { List <Inline> inlines = new List <Inline>(); inlines.AddRange(Expr1.BuildDocument()); inlines.Add(new Run(" % ")); inlines.AddRange(Expr2.BuildDocument()); return(inlines); }
public ModStr(KaitaiStream p__io, Expr2 p__parent = null, Expr2 p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; f_lenMod = false; f_char5 = false; f_tuple5 = false; _read(); }
StringBuilder IQueryElement.ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic) { Expr1 .ToString(sb, dic) .Append(' ') .Append(Operation) .Append(' '); return(Expr2.ToString(sb, dic)); }
public override int GetHashCode() { var hashCode = Operation.GetHashCode(); hashCode = unchecked (hashCode + (hashCode * 397) ^ SystemType.GetHashCode()); hashCode = unchecked (hashCode + (hashCode * 397) ^ Expr1.GetHashCode()); hashCode = unchecked (hashCode + (hashCode * 397) ^ Expr2.GetHashCode()); return(hashCode); }
public override void Jumping(int t, int f) { var label = t != 0 ? t : NewLabel(); Expr1.Jumping(label, 0); Expr2.Jumping(t, f); if (t == 0) { EmitLabel(label); } }
public override bool Equals(object obj) { if (!(obj is BinaryExpr)) { return(false); } BinaryExpr other = (BinaryExpr)obj; return(Expr1.Equals(other.Expr1) && Expr2.Equals(other.Expr2)); }
public ValueContainer Evaluate(IValueEnvironment env) { ValueContainer a = Expr2.Evaluate(env); ValueContainer b = Expr3.Evaluate(env); ValueContainer value = new ValueContainer(Convert.ToBoolean(Expr1.Evaluate(env).Value) ? a.Value : b.Value); Action onValueChanged = () => value.Value = Convert.ToBoolean(Expr1.Evaluate(env).Value) ? a.Value : b.Value; a.ValueChanged += onValueChanged; b.ValueChanged += onValueChanged; return(value); }
public override Expr Simplify() { if (Expr1.Equals(new CstI(0)) && Expr2.Equals(new CstI(0))) { return(new CstI(0)); } if (Expr1.Equals(Expr2)) { return(new CstI(0)); } return(Expr2.Equals(new CstI(0)) ? Expr1 : this); }
public ValueContainer Evaluate(IValueEnvironment env) { ValueContainer a = Expr1.Evaluate(env); ValueContainer b = Expr2.Evaluate(env); ValueContainer value = new ValueContainer(Evaluate(a, b)); Action onValueChanged = () => value.Value = Evaluate(a, b); a.ValueChanged += onValueChanged; b.ValueChanged += onValueChanged; return(value); }
public Expr2(KaitaiStream p__io, KaitaiStruct p__parent = null, Expr2 p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root ?? this; f_str1LenMod = false; f_str1Len = false; f_str1Tuple5 = false; f_str2Tuple5 = false; f_str1Avg = false; f_str1Byte1 = false; f_str1Char5 = false; _read(); }
public override ITypeCheckType TypeCheck(ITypeEnvironment env) { ITypeCheckType a = Expr1.TypeCheck(env); ITypeCheckType b = Expr2.TypeCheck(env); if (!a.CompatibleWith(ExpressionUpperBound) || !a.CompatibleWith(b)) { env.ReportError(String.Format("Comparison using '<=' not possible. Incompatible types: '{0}', '{1}'. Only numeric types are supported.", a, b), SourceStartPosition, SourceEndPosition); } return(new BoolType()); }
protected override void ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic) { Expr1.ToString(sb, dic); if (IsNot) { sb.Append(" NOT"); } sb.Append(" BETWEEN "); Expr2.ToString(sb, dic); sb.Append(" AND "); Expr3.ToString(sb, dic); }
protected override void ToStringInternal(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic) { Expr1.ToString(sb, dic); sb.Append(GetOperator()); Expr2.ToString(sb, dic); if (Escape != null) { sb.Append(" ESCAPE "); Escape.ToString(sb, dic); } }
public override ITypeCheckType TypeCheck(ITypeEnvironment env) { ITypeCheckType a = Expr1.TypeCheck(env); ITypeCheckType b = Expr2.TypeCheck(env); if (!a.CompatibleWith(ExpressionUpperBound) || !a.CompatibleWith(b)) { env.ReportError(String.Format("'||' not possible. Incompatible types: '{0}', '{1}'. Only the bool type is supported.", a, b), SourceStartPosition, SourceEndPosition); return(ExpressionUpperBound); } return(a.GetLeastUpperBound(b)); }
public bool Equals(ISqlExpression?other, Func <ISqlExpression, ISqlExpression, bool> comparer) { if (this == other) { return(true); } return (other is SqlBinaryExpression expr && Operation == expr.Operation && SystemType == expr.SystemType && Expr1.Equals(expr.Expr1, comparer) && Expr2.Equals(expr.Expr2, comparer) && comparer(this, other)); }
public override void Hide() { if (Expr1 != null) { Expr1.Hide(); } if (Expr2 != null) { Expr2.Hide(); } if (AndLabel != null) { AndLabel.Hide(); } }
bool IEquatable <ISqlExpression> .Equals(ISqlExpression other) { if (this == other) { return(true); } var expr = other as SqlBinaryExpression; return (expr != null && Operation == expr.Operation && SystemType == expr.SystemType && Expr1.Equals(expr.Expr1) && Expr2.Equals(expr.Expr2)); }
public bool Equals(IQueryExpression other, Func <IQueryExpression, IQueryExpression, bool> comparer) { if (this == other) { return(true); } var expr = other as ISqlBinaryExpression; return (expr != null && Operation == expr.Operation && SystemType == expr.SystemType && Expr1.Equals(expr.Expr1, comparer) && Expr2.Equals(expr.Expr2, comparer) && comparer(this, other)); }
protected override ICloneableElement Clone(Dictionary <ICloneableElement, ICloneableElement> objectTree, Predicate <ICloneableElement> doClone) { if (!doClone(this)) { return(this); } if (!objectTree.TryGetValue(this, out var clone)) { objectTree.Add(this, clone = new Between( (ISqlExpression)Expr1.Clone(objectTree, doClone), IsNot, (ISqlExpression)Expr2.Clone(objectTree, doClone), (ISqlExpression)Expr3.Clone(objectTree, doClone))); } return(clone); }