9 template <typename ExpSet> \
15 DEFINE::visit(const Type ## _t& v) \
35 template <
typename ExpSet>
43 template <
typename ExpSet>
51 template <
typename ExpSet>
52 template <type_t Type>
58 n.sub()->accept(*
this);
61 template <
typename ExpSet>
62 template <type_t Type>
68 hash_combine(res_, ExpSet::weightset_t::hash(n.weight()));
69 n.sub()->accept(*
this);
72 template <
typename ExpSet>
73 template <type_t Type>
79 for (
const auto& child : n)
void combine_type(const node_t &node)
Update res_ by hashing the node type; this is needed for any node.
typename super_t::template unary_t< Type > unary_t
void visit_unary(const unary_t< Type > &v)
Traverse a unary node (*, {c}).
void visit_weight_node(const weight_node_t< Type > &v)
Traverse a weight node (lweight, rweight).
typename super_t::template weight_node_t< Type > weight_node_t
typename super_t::template variadic_t< Type > variadic_t
void visit_variadic(const variadic_t< Type > &v)
Traverse an n-ary node (+, concatenation, &, :).
void hash_combine(std::size_t &seed, const T &v)
weight_node< type_t::lweight, Context > lweight
typename super_t::node_t node_t
weight_node< type_t::rweight, Context > rweight
void visit_nullary(const node_t &v)
Traverse a nullary node (atom, \z, \e).
The abstract parameterized, root for all rational expression types.