case xbt_automaton_exp_label::AUT_NOT:
return not evaluate_label(l->u.exp_not, values);
case xbt_automaton_exp_label::AUT_PREDICAT:{
- unsigned int cursor = 0;
- xbt_automaton_propositional_symbol_t p = nullptr;
- xbt_dynar_foreach(simgrid::mc::property_automaton->propositional_symbols, cursor, p) {
- if (std::strcmp(xbt_automaton_propositional_symbol_get_name(p), l->u.predicat) == 0)
- return values[cursor] != 0;
- }
+ auto cursor = mcapi::get().compare_automaton_exp_lable(l, values);
+ if(cursor >= 0)
+ return values[cursor] != 0;
xbt_die("Missing predicate");
break;
}
return automaton_stack;
}
+int mc_api::compare_automaton_exp_lable(const xbt_automaton_exp_label* l, std::vector<int> const& values) const
+{
+ unsigned int cursor = 0;
+ xbt_automaton_propositional_symbol_t p = nullptr;
+ xbt_dynar_foreach (simgrid::mc::property_automaton->propositional_symbols, cursor, p) {
+ if (std::strcmp(xbt_automaton_propositional_symbol_get_name(p), l->u.predicat) == 0)
+ return cursor;
+ }
+ return -1;
+}
+
} // namespace mc
} // namespace simgrid
#endif
std::vector<int> automaton_propositional_symbol_evaluate() const;
std::vector<xbt_automaton_state_t> get_automaton_state() const;
+ int compare_automaton_exp_lable(const xbt_automaton_exp_label* l, std::vector<int> const& values) const;
+
};
} // namespace mc