13enum class PrecedenceEnum { Relational, Add, Mul, Pow, Atom };
18 PrecedenceEnum precedence;
21 void bvisit(
const Add &x);
22 void bvisit(
const Mul &x);
24 void bvisit(
const Pow &x);
25 template <
typename Poly>
26 void bvisit_upoly(
const Poly &x)
28 if (x.end() == ++x.begin()) {
30 precedence = PrecedenceEnum::Atom;
31 if (
it->second == 1) {
32 if (
it->first == 0
or it->first == 1) {
33 precedence = PrecedenceEnum::Atom;
35 precedence = PrecedenceEnum::Pow;
41 precedence = PrecedenceEnum::Mul;
44 }
else if (x.begin() == x.end()) {
45 precedence = PrecedenceEnum::Atom;
47 precedence = PrecedenceEnum::Add;
51 template <
typename Container,
typename Poly>
59 template <
typename Container,
typename Poly>
62 if (0 == x.get_poly().dict_.size()) {
63 precedence = PrecedenceEnum::Atom;
64 }
else if (1 == x.get_poly().dict_.size()) {
65 auto iter = x.get_poly().dict_.begin();
66 precedence = PrecedenceEnum::Atom;
69 for (
unsigned int exp :
iter->first) {
72 precedence = PrecedenceEnum::Pow;
74 precedence = PrecedenceEnum::Mul;
79 if (
iter->second != 1)
80 precedence = PrecedenceEnum::Mul;
83 precedence = PrecedenceEnum::Add;
91#ifdef HAVE_SYMENGINE_PIRANHA
96#ifdef HAVE_SYMENGINE_MPFR
99#ifdef HAVE_SYMENGINE_MPC
102 void bvisit(
const Basic &x);
103 PrecedenceEnum getPrecedence(
const RCP<const Basic> &x);