5 #include "dreal/symbolic/symbolic_formula.h" 20 template <
typename Result,
typename Visitor,
typename... Args>
21 Result VisitFormula(Visitor* v,
const Formula& f, Args&&... args) {
22 switch (f.get_kind()) {
23 case FormulaKind::False:
24 return v->VisitFalse(f, std::forward<Args>(args)...);
25 case FormulaKind::True:
26 return v->VisitTrue(f, std::forward<Args>(args)...);
27 case FormulaKind::Var:
28 return v->VisitVariable(f, std::forward<Args>(args)...);
30 return v->VisitEqualTo(f, std::forward<Args>(args)...);
31 case FormulaKind::Neq:
32 return v->VisitNotEqualTo(f, std::forward<Args>(args)...);
34 return v->VisitGreaterThan(f, std::forward<Args>(args)...);
35 case FormulaKind::Geq:
36 return v->VisitGreaterThanOrEqualTo(f, std::forward<Args>(args)...);
38 return v->VisitLessThan(f, std::forward<Args>(args)...);
39 case FormulaKind::Leq:
40 return v->VisitLessThanOrEqualTo(f, std::forward<Args>(args)...);
41 case FormulaKind::And:
42 return v->VisitConjunction(f, std::forward<Args>(args)...);
44 return v->VisitDisjunction(f, std::forward<Args>(args)...);
45 case FormulaKind::Not:
46 return v->VisitNegation(f, std::forward<Args>(args)...);
47 case FormulaKind::Forall:
48 return v->VisitForall(f, std::forward<Args>(args)...);
52 throw std::runtime_error(
"Should not be reachable.");
Sum type of symbolic::Expression and symbolic::Formula.
Definition: api.cc:9