diff options
Diffstat (limited to 'parameter/SelectionCriterionRule.cpp')
-rw-r--r-- | parameter/SelectionCriterionRule.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/parameter/SelectionCriterionRule.cpp b/parameter/SelectionCriterionRule.cpp index bb353bd..e25cc07 100644 --- a/parameter/SelectionCriterionRule.cpp +++ b/parameter/SelectionCriterionRule.cpp @@ -33,6 +33,7 @@ #include "XmlDomainSerializingContext.h" #include "SelectionCriteriaDefinition.h" #include "SelectionCriterionTypeInterface.h" +#include "RuleParser.h" #include <assert.h> #define base CRule @@ -54,6 +55,78 @@ string CSelectionCriterionRule::getKind() const return "SelectionCriterionRule"; } +// Content dumping +void CSelectionCriterionRule::logValue(string& strValue, CErrorContext& errorContext) const +{ + (void)errorContext; + + // Dump rule + dump(strValue); +} + +// Parse +bool CSelectionCriterionRule::parse(CRuleParser& ruleParser, string& strError) +{ + // Criterion + _pSelectionCriterion = ruleParser.getSelectionCriteriaDefinition()->getSelectionCriterion(ruleParser.getType()); + + // Check existence + if (!_pSelectionCriterion) { + + strError = "Couldn't find selection criterion " + ruleParser.getType(); + + return false; + } + + // Verb + string strMatchesWhen; + + if (!ruleParser.next(strMatchesWhen, strError)) { + + return false; + } + // Value + string strValue; + + if (!ruleParser.next(strValue, strError)) { + + return false; + } + + // Matches when + if (!setMatchesWhen(strMatchesWhen, strError)) { + + strError = "Verb error: " + strError; + + return false; + } + + // Value + if (!_pSelectionCriterion->getCriterionType()->getNumericalValue(strValue, _iMatchValue)) { + + strError = "Value error: " + strError; + + return false; + } + + return true; +} + +// Dump +void CSelectionCriterionRule::dump(string& strResult) const +{ + // Criterion + strResult += _pSelectionCriterion->getName(); + strResult += " "; + // Verb + strResult += _astMatchesWhen[_eMatchesWhen].pcMatchesWhen; + strResult += " "; + // Value + string strValue; + _pSelectionCriterion->getCriterionType()->getLiteralValue(_iMatchValue, strValue); + strResult += strValue; +} + // Rule check bool CSelectionCriterionRule::matches() const { |