]> git.mxchange.org Git - simgear.git/commitdiff
Allow the not operator in expressions
authorFrederic Bouvier <fredfgfs01@free.fr>
Sun, 4 Mar 2012 20:24:54 +0000 (21:24 +0100)
committerFrederic Bouvier <fredfgfs01@free.fr>
Sun, 4 Mar 2012 20:24:54 +0000 (21:24 +0100)
simgear/structure/SGExpression.cxx

index 6f292e46faa8ed596044ac30a77560104b4491b9..b14a5a50190568615947f92aa6f8c508514cb5bc 100644 (file)
@@ -866,6 +866,23 @@ Expression* logicopParser(const SGPropertyNode* exp, Parser* parser)
 ExpParserRegistrar andRegistrar("and", logicopParser<AndExpression>);
 ExpParserRegistrar orRegistrar("or", logicopParser<OrExpression>);
 
+Expression* notLogicopParser(const SGPropertyNode* exp, Parser* parser)
+{
+    using namespace boost;
+    vector<Expression*> children;
+    parser->readChildren(exp, children);
+    vector<Expression*>::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<bool>*>(children[0]));
+    return expr;
+}
+
+ExpParserRegistrar notRegistrar("not", notLogicopParser);
+
 int BindingLayout::addBinding(const string& name, Type type)
 {
     //XXX error checkint