22 #include <spot/twa/twagraph.hh>
41 template<
typename Trans>
42 void transform_accessible(
const const_twa_graph_ptr& old,
44 Trans trans,
unsigned int init)
46 std::vector<unsigned> todo;
47 std::vector<unsigned> seen(old->num_states(), -1
U);
50 [&](
unsigned old_state) ->
unsigned
52 unsigned tmp = seen[old_state];
55 tmp = cpy->new_state();
56 seen[old_state] = tmp;
57 todo.push_back(old_state);
62 cpy->set_init_state(new_state(init));
65 unsigned old_src = todo.back();
68 unsigned new_src = seen[old_src];
69 assert(new_src != -1
U);
71 for (
auto& t: old->out(old_src))
74 acc_cond::mark_t acc = t.acc;
75 trans(t.src, cond, acc, t.dst);
78 cpy->new_edge(new_src,
99 template<
typename Trans>
100 void transform_copy(
const const_twa_graph_ptr& old,
102 Trans trans,
unsigned int init)
105 cpy->new_states(old->num_states());
106 cpy->set_init_state(init);
108 for (
auto& t: old->edges())
111 acc_cond::mark_t acc = t.acc;
112 trans(t.src, cond, acc, t.dst);
115 assert(t.src < cpy->num_states() && t.dst < cpy->num_states());
116 if (cond != bddfalse)
117 cpy->new_edge(t.src, t.dst, cond, acc);
121 template<
typename Trans>
122 void transform_accessible(
const const_twa_graph_ptr& old,
126 transform_accessible(old, cpy, trans, old->get_init_state_number());
128 template<
typename Trans>
129 void transform_copy(
const const_twa_graph_ptr& old,
133 transform_copy(old, cpy, trans, old->get_init_state_number());
138 twa_graph_ptr mask_acc_sets(
const const_twa_graph_ptr& in,
139 acc_cond::mark_t to_remove);
146 twa_graph_ptr mask_keep_states(
const const_twa_graph_ptr& in,
147 std::vector<bool>& to_keep,