Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
BooleanExpr.cs
Go to the documentation of this file.
3
5
6internal sealed class BooleanExpr : ValueQuery
7{
8 private readonly Query _opnd1;
9
10 private readonly Query _opnd2;
11
12 private readonly bool _isOr;
13
14 public override XPathResultType StaticType => XPathResultType.Boolean;
15
16 public BooleanExpr(Operator.Op op, Query opnd1, Query opnd2)
17 {
18 if (opnd1.StaticType != XPathResultType.Boolean)
19 {
20 opnd1 = new BooleanFunctions(Function.FunctionType.FuncBoolean, opnd1);
21 }
22 if (opnd2.StaticType != XPathResultType.Boolean)
23 {
24 opnd2 = new BooleanFunctions(Function.FunctionType.FuncBoolean, opnd2);
25 }
26 _opnd1 = opnd1;
27 _opnd2 = opnd2;
28 _isOr = op == Operator.Op.OR;
29 }
30
31 private BooleanExpr(BooleanExpr other)
32 : base(other)
33 {
34 _opnd1 = Query.Clone(other._opnd1);
35 _opnd2 = Query.Clone(other._opnd2);
36 _isOr = other._isOr;
37 }
38
39 public override void SetXsltContext(XsltContext context)
40 {
41 _opnd1.SetXsltContext(context);
42 _opnd2.SetXsltContext(context);
43 }
44
45 public override object Evaluate(XPathNodeIterator nodeIterator)
46 {
47 object obj = _opnd1.Evaluate(nodeIterator);
48 if ((bool)obj == _isOr)
49 {
50 return obj;
51 }
52 return _opnd2.Evaluate(nodeIterator);
53 }
54
55 public override XPathNodeIterator Clone()
56 {
57 return new BooleanExpr(this);
58 }
59}
override XPathResultType StaticType
override void SetXsltContext(XsltContext context)
override XPathNodeIterator Clone()
override object Evaluate(XPathNodeIterator nodeIterator)
BooleanExpr(Operator.Op op, Query opnd1, Query opnd2)
object Evaluate(XPathNodeIterator nodeIterator)
virtual void SetXsltContext(XsltContext context)
Definition Query.cs:52
XPathResultType StaticType
Definition Query.cs:34
static Query Clone(Query input)
Definition Query.cs:66