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