}
for (auto &c : r1.condition) {
+ if (c.first == FieldType::Tag)
+ continue;
+
if (r2.condition.find(c.first) != r2.condition.end()) {
int ret = c.second->getRelation(r2.condition[c.first]);
if (ret == FieldBase::RelSeparate)
bool Rule::compareFieldType(const Rule &rule)
{
for (auto c : rule.condition) {
+ if (c.first == FieldType::Tag)
+ continue;
+
if (condition.find(c.first) == condition.end())
return false;
}
bool Rule::compareCondition(Rule &rule)
{
for (auto c : condition) {
+ if (c.first == FieldType::Tag)
+ continue;
+
if (rule.condition.find(c.first) == rule.condition.end()
|| !c.second->compare(rule.condition[c.first])) {
return false;
if (!rule.getMask().empty())
optimizedList.emplace_back(rule);
+
+ //TODO: relocate optimizedList
+ for (auto r = optimizedList.begin()+1; r != optimizedList.end(); r++) {
+ auto index = std::distance(optimizedList.begin(), r);
+ r->setCondition(Tag(std::to_string(index)));
+ }
}
void RuleApplyEngine::addNeverRules()