From: Frederic Bouvier Date: Sun, 4 Mar 2012 20:24:54 +0000 (+0100) Subject: Allow the not operator in expressions X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=92074f0d3c29ed5d064db0c943cf88760c930e23;p=simgear.git Allow the not operator in expressions --- diff --git a/simgear/structure/SGExpression.cxx b/simgear/structure/SGExpression.cxx index 6f292e46..b14a5a50 100644 --- a/simgear/structure/SGExpression.cxx +++ b/simgear/structure/SGExpression.cxx @@ -866,6 +866,23 @@ Expression* logicopParser(const SGPropertyNode* exp, Parser* parser) ExpParserRegistrar andRegistrar("and", logicopParser); ExpParserRegistrar orRegistrar("or", logicopParser); +Expression* notLogicopParser(const SGPropertyNode* exp, Parser* parser) +{ + using namespace boost; + vector children; + parser->readChildren(exp, children); + vector::iterator notBool = + find_if(children.begin(), children.end(), + boost::bind(&Expression::getType, _1) != BOOL); + if (notBool != children.end() || children.size() != 1) + throw("non boolean operand to not expression"); + NotExpression *expr = new NotExpression; + expr->setOperand(static_cast< ::SGExpression*>(children[0])); + return expr; +} + +ExpParserRegistrar notRegistrar("not", notLogicopParser); + int BindingLayout::addBinding(const string& name, Type type) { //XXX error checkint