23 #include "twa/twagraph.hh"
33 : cond(cond), dst(dst)
40 typedef std::vector<scc_trans> scc_succs;
48 std::list<unsigned> states_;
55 acc_(0U), trivial_(
true), accepting_(
false),
56 rejecting_(
false), useful_(
false)
61 acc_(acc), trivial_(trivial), accepting_(
false),
62 rejecting_(
false), useful_(
false)
66 bool is_trivial()
const
89 bool is_useful()
const
99 const std::list<unsigned>& states()
const
104 const scc_succs& succ()
const
112 std::vector<unsigned> sccof_;
113 std::vector<scc_node> node_;
114 const_twa_graph_ptr aut_;
117 void determine_usefulness();
119 const scc_node& node(
unsigned scc)
const
121 assert(scc < node_.size());
126 scc_info(const_twa_graph_ptr aut);
128 const_twa_graph_ptr get_aut()
const
133 unsigned scc_count()
const
138 bool reachable_state(
unsigned st)
const
140 return scc_of(st) != -1U;
143 unsigned scc_of(
unsigned st)
const
145 assert(st < sccof_.size());
150 SPOT_RETURN(node_.begin());
152 SPOT_RETURN(node_.end());
154 SPOT_RETURN(node_.cbegin());
156 SPOT_RETURN(node_.cend());
158 SPOT_RETURN(node_.rbegin());
160 SPOT_RETURN(node_.rend());
162 const
std::list<
unsigned>& states_of(
unsigned scc)
const
164 return node(scc).states();
167 unsigned one_state_of(
unsigned scc)
const
169 return states_of(scc).front();
175 assert(scc_count() - 1 == scc_of(aut_->get_init_state_number()));
176 return scc_count() - 1;
179 const scc_succs& succ(
unsigned scc)
const
181 return node(scc).succ();
184 bool is_trivial(
unsigned scc)
const
186 return node(scc).is_trivial();
189 acc_cond::mark_t acc(
unsigned scc)
const
191 return node(scc).acc_marks();
194 bool is_accepting_scc(
unsigned scc)
const
196 return node(scc).is_accepting();
199 bool is_rejecting_scc(
unsigned scc)
const
201 return node(scc).is_rejecting();
206 void determine_unknown_acceptance();
208 bool is_useful_scc(
unsigned scc)
const
210 return node(scc).is_useful();
213 bool is_useful_state(
unsigned st)
const
215 return reachable_state(st) && node(scc_of(st)).is_useful();
220 std::vector<std::set<acc_cond::mark_t>> used_acc()
const;
222 std::set<acc_cond::mark_t> used_acc_of(
unsigned scc)
const;
225 std::vector<bool> weak_sccs()
const;
227 bdd scc_ap_support(
unsigned scc)
const;
234 SPOT_API std::ostream&
235 dump_scc_info_dot(std::ostream& out,
236 const_twa_graph_ptr aut, scc_info* sccinfo =
nullptr);
Definition: sccinfo.hh:42
bool is_rejecting() const
Definition: sccinfo.hh:84
Definition: sccinfo.hh:27
Definition: formula.hh:515
Definition: sccinfo.hh:30
unsigned initial() const
Get number of the SCC containing the initial state.
Definition: sccinfo.hh:173
bool is_accepting() const
True if we are sure that the SCC is accepting.
Definition: sccinfo.hh:75