11 template <Automaton Aut>
14 -> std::enable_if_t<!context_t_of<Aut>::is_lao,
24 using state_map_t = std::unordered_map<in_state_t, out_state_t>;
25 state_map_t out_state_{{aut->pre(),
res->pre()},
26 {aut->post(),
res->post()}};
27 for (
auto s: aut->states())
28 out_state_[s] =
res->new_state();
32 auto src = out_state_.find(aut->src_of(t));
33 auto dst = out_state_.find(aut->dst_of(t));
34 if (src != out_state_.end() && dst != out_state_.end())
36 if (src->second ==
res->pre() || dst->second ==
res->post())
37 res->new_transition(src->second, dst->second,
38 res->labelset()->special(),
41 res->new_transition(src->second, dst->second,
42 res->labelset()->one(), aut->weight_of(t));
51 template <Automaton Aut>
54 -> std::enable_if_t<context_t_of<Aut>::is_lao, decltype(
copy(aut))>
Ctx make_context(const std::string &name)
Build a context from its name.
auto to_spontaneous(const Aut &aut) -> std::enable_if_t<!context_t_of< Aut >::is_lao, decltype(make_mutable_automaton(make_context(oneset(), *aut->weightset())))>
Convert to spontaneous automaton: change every transition's label to the empty word.
auto all_transitions(const Aut &aut)
All the transition indexes between all states (including pre and post).
Implementation of labels are ones: there is a single instance of label.
typename detail::state_t_of_impl< base_t< ValueSet >>::type state_t_of
auto copy(const AutIn &input, KeepState keep_state, KeepTrans keep_trans) -> decltype(keep_state(input->null_state()), keep_trans(input->null_transition()), make_fresh_automaton< AutIn, AutOut >(input))
A copy of input keeping only its states that are accepted by keep_state, and transitions accepted by ...
mutable_automaton< Context > make_mutable_automaton(const Context &ctx)