aboutsummaryrefslogtreecommitdiffstats
path: root/parameter/SelectionCriterionRule.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'parameter/SelectionCriterionRule.cpp')
-rw-r--r--parameter/SelectionCriterionRule.cpp73
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
{