44 template <
Automaton... Aut,
typename Operation>
50 constexpr
bool are_free
51 = all_<labelset_t_of<decltype(auts)>::is_free()...>();
57 else if (static_if<are_free>
59 #if (defined __clang__ && __clang_major__ == 3 && __clang_minor__ < 6 \
60 || defined __GNUC__ && !defined __clang__ && __GNUC__ < 5)
62 [](
auto&&... as){
return false; }
64 [](
auto&&...){
return false; }
67 (std::forward<Aut>(auts)...))
68 algo =
"deterministic";
73 if (algo ==
"general")
75 else if (algo ==
"standard")
81 if (algo ==
"deterministic")
82 static_if<are_free>([&
res](
auto&& op)
144 static auto res =
symbol{
"weighted_tag"};
Tag for operations on all automata.
auto join_automata(Auts &&...auts) -> decltype(pass(auts->null_state()...), make_mutable_automaton(join(auts->context()...)))
An automaton whose type is the join between those of auts.
boost::flyweight< std::string, boost::flyweights::no_tracking, boost::flyweights::intermodule_holder > symbol
An internalized string.
std::ostream & str_escape(std::ostream &os, const std::string &str, const char *special=nullptr)
Output a string, escaping special characters.
Tag for operations on standard automata.
Tag to request the most appropriate version of an algorithm.
void require(Bool b, Args &&...args)
If b is not verified, raise an error with args as message.
bool is_standard(const Aut &a)
Whether a is standard.
bool is_deterministic(const Aut &aut, state_t_of< Aut > s)
Whether state s is deterministic in aut.
Request the Boolean specialization for determinization (B and F2).
auto make_join_automaton(deterministic_tag, Auts &&...auts) -> decltype(join_automata(std::forward< Auts >(auts)...))
Make an empty automaton which is a supertype of others.
Request for the weighted version of an algorithm.
auto nullable_join_automata(Auts &&...auts) -> decltype(pass(auts->null_state()...), make_mutable_automaton(nullable_join_context(auts...)))
An automaton whose type is the nullable join between those of auts.
bool all(Bool &&...values)
Whether all the values evaluate as true.
auto dispatch_tags(std::string algo, Operation op, Aut &&...auts)
Dispatch an operation between automata depending on their nature.
Tag for operations on deterministic automata.