44 template <
Automaton... Aut,
typename Operation>
50 constexpr
bool are_free
51 = all_<labelset_t_of<decltype(auts)>::is_free()...>();
58 # pragma GCC diagnostic push
59 # pragma GCC diagnostic ignored "-Wunused-parameter"
63 else if (static_if<are_free>
65 #if (defined __clang__ && __clang_major__ == 3 && __clang_minor__ < 6 \
66 || defined __GNUC__ && !defined __clang__ && __GNUC__ < 5)
68 [](
auto&&... as){
return false; }
70 [](
auto&&...){
return false; }
73 (std::forward<Aut>(auts)...))
74 algo =
"deterministic";
78 # pragma GCC diagnostic pop
82 if (algo ==
"general")
84 else if (algo ==
"standard")
90 if (algo ==
"deterministic")
91 static_if<are_free>([&
res](
auto&& op)
153 static auto res =
symbol{
"weighted_tag"};
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.
Tag for operations on all automata.
Tag for operations on standard automata.
bool is_deterministic(const Aut &aut, state_t_of< Aut > s)
Whether state s is deterministic in aut.
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.
bool all(Bool &&...values)
Whether all the values evaluate as true.
void require(Bool b, Args &&...args)
If b is not verified, raise an error with args as message.
Tag to request the most appropriate version of an algorithm.
boost::flyweight< std::string, boost::flyweights::no_tracking, boost::flyweights::intermodule_holder > symbol
An internalized string.
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.
Tag for operations on deterministic automata.
Request the Boolean specialization for determinization (B and F2).
std::ostream & str_escape(std::ostream &os, const std::string &str, const char *special=nullptr)
Output a string, escaping special characters.
bool is_standard(const Aut &a)
Whether a is standard.
Request for the weighted version of an algorithm.
auto dispatch_tags(std::string algo, Operation op, Aut &&...auts)
Dispatch an operation between automata depending on their nature.