9 template <
typename ExpSet>
11 :
public ExpSet::const_visitor
16 using weight_t =
typename context_t::weightset_t::value_t;
17 using super_t =
typename expressionset_t::const_visitor;
18 using node_t =
typename super_t::node_t;
19 using inner_t =
typename super_t::inner_t;
20 template <type_t Type>
22 template <type_t Type>
24 template <type_t Type>
26 using leaf_t =
typename super_t::leaf_t;
29 constexpr
static const char*
me() {
return "hash"; }
64 using tuple_t =
typename super_t::tuple_t;
66 template <
bool = context_t::is_lat,
67 typename Dummy =
void>
70 using tupleset_t =
typename expressionset_t::template as_tupleset_t<>;
73 return tupleset_t::hash(v.sub());
77 template <
typename Dummy>
98 template <rat::exp::type_t Type>
102 template <rat::exp::type_t Type>
106 template <rat::exp::type_t Type>
void combine_type(const node_t &node)
Update res_ by hashing the node type; this is needed for any node.
void visit(const tuple_t &v, std::true_type) override
VCSN_RAT_VISIT(complement, v)
typename super_t::template unary_t< Type > unary_t
VCSN_RAT_VISIT(shuffle, v)
void visit_unary(const unary_t< Type > &v)
Traverse a unary node (*, {c}).
size_t operator()(const node_t &v)
Entry point: return the hash of v.
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
typename super_t::inner_t inner_t
VCSN_RAT_VISIT(infiltration, v)
typename super_t::leaf_t leaf_t
typename expressionset_t::template as_tupleset_t<> tupleset_t
An inner node with multiple children.
void visit_variadic(const variadic_t< Type > &v)
Traverse an n-ary node (+, concatenation, &, :).
#define BUILTIN_UNREACHABLE()
typename super_t::node_t node_t
size_t operator()(const tuple_t &v)
VCSN_RAT_VISIT(transposition, v)
typename detail::context_t_of_impl< base_t< ValueSet >>::type context_t_of
An inner node implementing a weight.
context_t_of< expressionset_t > context_t
VCSN_RAT_VISIT(conjunction, v)
void visit_nullary(const node_t &v)
Traverse a nullary node (atom, \z, \e).
size_t operator()(const std::shared_ptr< const node_t > &v)
Entry point: return the hash of v.
typename context_t::weightset_t::value_t weight_t
typename super_t::tuple_t tuple_t
size_t operator()(const tuple_t &)
static constexpr const char * me()
Name of this algorithm, for error messages.
The abstract parameterized, root for all rational expression types.
typename expressionset_t::const_visitor super_t