1 #include "ConditionalExpression.hpp" 2 3 namespace pdal 4 { 5 namespace expr 6 { 7 prepare(PointLayoutPtr layout)8Utils::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) const36bool 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