3 #ifndef CPROVER_SOLVERS_SMT2_INCREMENTAL_SMT_LOGICS_H
4 #define CPROVER_SOLVERS_SMT2_INCREMENTAL_SMT_LOGICS_H
30 template <
typename derivedt>
43 template <
typename derivedt>
47 std::is_base_of<irept, derivedt>::value &&
49 "Only irept based classes need to upcast smt_termt to store it.");
52 template <
typename derivedt>
55 return static_cast<irept &&
>(std::move(logic));
58 template <
typename derivedt>
64 #define LOGIC_ID(the_id, the_name) \
66 class smt_logic_##the_id##t : public smt_logict \
69 smt_logic_##the_id##t(); \
71 #include "smt_logics.def"
77 #define LOGIC_ID(the_id, the_name) \
78 virtual void visit(const smt_logic_##the_id##t &) = 0;
79 #include "smt_logics.def"
There are a large number of kinds of tree structured or tree-like data in CPROVER.
std::string pretty(unsigned indent=0, unsigned max_indent=0) const
Class for adding the ability to up and down cast smt_logict to and from irept.
static const smt_logict & downcast(const irept &)
static irept upcast(smt_logict logic)
void accept(smt_logic_const_downcast_visitort &) const
bool operator==(const smt_logict &) const
bool operator!=(const smt_logict &) const