X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fprops%2Fcondition.cxx;h=2c8a3e9fbf1e39c46b683cf5aea35f770f8aec11;hb=2e93b06ac0874f1cee1e22dc30777a0066ef289b;hp=a633cacd33e318f80b71df3081ffec0d0de4afe6;hpb=2e078aff7d3c926d8e7fa13ccc180fc5497dd0d5;p=simgear.git diff --git a/simgear/props/condition.cxx b/simgear/props/condition.cxx index a633cacd..2c8a3e9f 100644 --- a/simgear/props/condition.cxx +++ b/simgear/props/condition.cxx @@ -8,18 +8,20 @@ // $Id$ #ifdef HAVE_CONFIG_H -# include +# include #endif -// #include STL_IOSTREAM +// #include #include #include "props.hxx" #include "condition.hxx" -SG_USING_STD(istream); -SG_USING_STD(ostream); +#include + +using std::istream; +using std::ostream; @@ -65,7 +67,6 @@ SGNotCondition::SGNotCondition (SGCondition * condition) SGNotCondition::~SGNotCondition () { - delete _condition; } bool @@ -86,8 +87,6 @@ SGAndCondition::SGAndCondition () SGAndCondition::~SGAndCondition () { - for (unsigned int i = 0; i < _conditions.size(); i++) - delete _conditions[i]; } bool @@ -119,8 +118,6 @@ SGOrCondition::SGOrCondition () SGOrCondition::~SGOrCondition () { - for (unsigned int i = 0; i < _conditions.size(); i++) - delete _conditions[i]; } bool @@ -149,8 +146,9 @@ SGOrCondition::addCondition (SGCondition * condition) static int doComparison (const SGPropertyNode * left, const SGPropertyNode *right) { + using namespace simgear; switch (left->getType()) { - case SGPropertyNode::BOOL: { + case props::BOOL: { bool v1 = left->getBoolValue(); bool v2 = right->getBoolValue(); if (v1 < v2) @@ -161,7 +159,7 @@ doComparison (const SGPropertyNode * left, const SGPropertyNode *right) return SGComparisonCondition::EQUALS; break; } - case SGPropertyNode::INT: { + case props::INT: { int v1 = left->getIntValue(); int v2 = right->getIntValue(); if (v1 < v2) @@ -172,7 +170,7 @@ doComparison (const SGPropertyNode * left, const SGPropertyNode *right) return SGComparisonCondition::EQUALS; break; } - case SGPropertyNode::LONG: { + case props::LONG: { long v1 = left->getLongValue(); long v2 = right->getLongValue(); if (v1 < v2) @@ -183,7 +181,7 @@ doComparison (const SGPropertyNode * left, const SGPropertyNode *right) return SGComparisonCondition::EQUALS; break; } - case SGPropertyNode::FLOAT: { + case props::FLOAT: { float v1 = left->getFloatValue(); float v2 = right->getFloatValue(); if (v1 < v2) @@ -194,7 +192,7 @@ doComparison (const SGPropertyNode * left, const SGPropertyNode *right) return SGComparisonCondition::EQUALS; break; } - case SGPropertyNode::DOUBLE: { + case props::DOUBLE: { double v1 = left->getDoubleValue(); double v2 = right->getDoubleValue(); if (v1 < v2) @@ -205,9 +203,9 @@ doComparison (const SGPropertyNode * left, const SGPropertyNode *right) return SGComparisonCondition::EQUALS; break; } - case SGPropertyNode::STRING: - case SGPropertyNode::NONE: - case SGPropertyNode::UNSPECIFIED: { + case props::STRING: + case props::NONE: + case props::UNSPECIFIED: { string v1 = left->getStringValue(); string v2 = right->getStringValue(); if (v1 < v2) @@ -218,8 +216,10 @@ doComparison (const SGPropertyNode * left, const SGPropertyNode *right) return SGComparisonCondition::EQUALS; break; } + default: + throw sg_exception("condition: unrecognized node type in comparison"); } - throw sg_exception("Unrecognized node type"); + return 0; } @@ -304,7 +304,7 @@ readNotCondition( SGPropertyNode *prop_root, const SGPropertyNode *node ) if (condition != 0) return new SGNotCondition(condition); } - SG_LOG(SG_COCKPIT, SG_ALERT, "Panel: empty 'not' condition"); + SG_LOG(SG_COCKPIT, SG_ALERT, "empty 'not' condition"); return 0; } @@ -346,8 +346,10 @@ readComparison( SGPropertyNode *prop_root, condition->setLeftProperty(prop_root, node->getStringValue("property[0]")); if (node->hasValue("property[1]")) condition->setRightProperty(prop_root, node->getStringValue("property[1]")); - else + else if (node->hasValue("value")) condition->setRightValue(node->getChild("value", 0)); + else + throw sg_exception("condition: comparison without property[1] or value"); return condition; } @@ -398,13 +400,11 @@ SGConditional::SGConditional () SGConditional::~SGConditional () { - delete _condition; } void SGConditional::setCondition (SGCondition * condition) { - delete _condition; _condition = condition; }