1 #include "ConditionalExpression.hpp"
2 
3 namespace pdal
4 {
5 namespace expr
6 {
7 
prepare(PointLayoutPtr layout)8 Utils::StatusWithReason ConditionalExpression::prepare(PointLayoutPtr layout)
9 {
10     Node *top = topNode();
11     if (top)
12     {
13         auto status = top->prepare(layout);
14         if (status)
15         {
16             if (top->isValue())
17                 status =
18                     { -1, "Expression evaluates to a value, not a boolean." };
19             else
20             {
21                 ConstLogicalNode *n = dynamic_cast<ConstLogicalNode *>(top);
22                 if (n)
23                 {
24                     if (n->value())
25                         status = { -1, "Expression is always true." };
26                     else
27                         status = { -1, "Expression is always false." };
28                 }
29             }
30         }
31         return status;
32     }
33     return true;
34 }
35 
eval(PointRef & p) const36 bool ConditionalExpression::eval(PointRef& p) const
37 {
38     const Node *n = topNode();
39     return n ? n->eval(p).m_bval : true;
40 }
41 
42 } // namespace expr
43 } // namespace pdal
44 
45