3 #include <unordered_map> 5 #include <boost/optional.hpp> 19 template <Automaton Aut>
28 boost::optional<label_t>
label = {})
44 auto it =
tag_.find(s);
101 std::unordered_map<state_t, status>
tag_;
111 template <Automaton Aut>
113 std::enable_if_t<context_t_of<Aut>::has_one(),
bool>
120 template <Automaton Aut>
122 std::enable_if_t<!context_t_of<Aut>::has_one(),
bool>
128 template <Automaton Aut>
142 template <Automaton Aut>
bool operator()()
Whether the automaton is acyclic.
ATTRIBUTE_CONST std::enable_if_t< context_t_of< Aut >::has_one(), bool > is_eps_acyclic(const Aut &aut)
Detect epsilon-circuits.
std::unordered_map< state_t, status > tag_
label_t_of< automaton_t > label_t
boost::optional< label_t > one_
std::remove_cv_t< Aut > automaton_t
ATTRIBUTE_CONST bool is_acyclic(const Aut &aut)
typename detail::label_t_of_impl< base_t< ValueSet > >::type label_t_of
bool none_of(const Range &r, Predicate p)
There is an circuit accessible from s.
bool has_circuit_(state_t s)
Whether a circuit is accessible from s.
auto out(const Aut &aut, state_t_of< Aut > s)
Indexes of visible transitions leaving state s.
value_impl< detail::label_tag > label
typename detail::state_t_of_impl< base_t< ValueSet > >::type state_t_of
There is no circuit accessible from s.
auto & as()
Extract wrapped typed automaton.
The graph reachable from s is under exploration.
is_acyclic_impl(const automaton_t &aut, boost::optional< label_t > label={})
state_t_of< automaton_t > state_t
#define BUILTIN_UNREACHABLE()