30 template <
Automaton... Aut,
typename Operation>
36 constexpr
bool are_free
37 = all_<labelset_t_of<decltype(auts)>::is_free()...>();
43 else if (static_if<are_free>
45 #if (defined __clang__ && __clang_major__ == 3 && __clang_minor__ < 6 \
46 || defined __GNUC__ && !defined __clang__ && __GNUC__ < 5)
48 [](
auto&&... as){
return false; }
50 [](
auto&&...){
return false; }
53 (std::forward<Aut>(auts)...))
54 algo =
"deterministic";
59 if (algo ==
"general")
61 else if (algo ==
"standard")
67 if (algo ==
"deterministic")
68 static_if<are_free>([&res](
auto&& op)
109 static auto res =
symbol{
"boolean_tag"};
126 static auto res =
symbol{
"weighted_tag"};
Tag for operations on all automata.
bool all(Bool &&...values)
void require(Bool b, Args &&...args)
If b is not verified, raise an error with args as message.
std::ostream & str_escape(std::ostream &os, const std::string &str, const char *special=nullptr)
Output a string, escaping special characters.
Request the Boolean specialization for determinization (B and F2).
Tag to request the most appropriate version of an algorithm.
auto make_join_automaton(deterministic_tag, Auts &&...auts)
Make an empty automaton which is a supertype of others.
bool is_deterministic(const Aut &aut, state_t_of< Aut > s)
Whether state s is deterministic in aut.
auto nullable_join_automata(Auts &&...auts) -> decltype(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 deterministic automata.
auto join_automata(Auts &&...auts) -> decltype(make_mutable_automaton(join(auts->context()...)))
An automaton whose type is the join between those of auts.
bool is_standard(const Aut &a)
Whether a is standard.
Request for the weighted version of an algorithm.
Tag for operations on standard automata.
auto dispatch_tags(std::string algo, Operation op, Aut &&...auts)
Dispatch an operation between automata depending on their nature.