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 dispatch_tags(std::string algo, Operation op, Aut &&... auts)
Dispatch an operation between automata depending on their nature.
Request the Boolean specialization for determinization (B and F2).
Tag for operations on deterministic automata.
bool all(Bool &&... values)
Whether all the values evaluate as true.
Request for the weighted version of an algorithm.
Tag for operations on standard automata.
Tag to request the most appropriate version of an algorithm.
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.
bool is_deterministic(const Aut &aut, state_t_of< Aut > s)
Whether state s is deterministic in aut.
void require(Bool b, Args &&... args)
If b is not verified, raise an error with args as message.
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.
boost::flyweight< std::string, boost::flyweights::no_tracking, boost::flyweights::intermodule_holder > symbol
An internalized string.
Tag for operations on all automata.
std::ostream & str_escape(std::ostream &os, const std::string &str, const char *special=nullptr)
Output a string, escaping special characters.
auto make_join_automaton(standard_tag, Auts &&... auts) -> decltype(join_automata(std::forward< Auts >(auts)...))
Make an empty automaton which is a supertype of others.
bool is_standard(const Aut &a)
Whether a is standard.