26 #include "misc/hash.hh"
41 typedef std::list<transition*> state;
42 typedef std::set<state*> state_set;
58 virtual
std::
string format_state(const
spot::state* state) const = 0;
61 virtual bdd compute_support_conditions(const
spot::state* state)
67 ss_vec state_set_vec_;
81 set_state(
const taa_tgba::state_set* s,
bool delete_me =
false)
82 : s_(s), delete_me_(delete_me)
87 virtual size_t hash()
const;
96 const taa_tgba::state_set* get_state()
const;
98 const taa_tgba::state_set* s_;
108 virtual bool first();
110 virtual bool done()
const;
112 virtual set_state* current_state()
const;
113 virtual bdd current_condition()
const;
119 typedef taa_tgba::state::const_iterator iterator;
120 typedef std::pair<iterator, iterator> iterator_pair;
121 typedef std::vector<iterator_pair> bounds_t;
123 std::vector<taa_tgba::transition*>,
126 struct distance_sort :
127 public std::binary_function<const iterator_pair&,
128 const iterator_pair&, bool>
131 operator()(
const iterator_pair& lhs,
const iterator_pair& rhs)
const
133 return std::distance(lhs.first, lhs.second) <
134 std::distance(rhs.first, rhs.second);
138 std::vector<taa_tgba::transition*>::const_iterator i_;
139 std::vector<taa_tgba::transition*> succ_;
146 template<
typename label>
154 for (
auto i: name_state_map_)
156 for (
auto i2: *i.second)
162 void set_init_state(
const label& s)
164 std::vector<label> v(1);
168 void set_init_state(
const std::vector<label>& s)
170 init_ = add_state_set(s);
174 create_transition(
const label& s,
175 const std::vector<label>& d)
177 state* src = add_state(s);
178 state_set* dst = add_state_set(d);
181 t->condition = bddtrue;
182 t->acceptance_conditions = 0
U;
188 create_transition(
const label& s,
const label& d)
190 std::vector<std::string> vec;
192 return create_transition(s, vec);
197 auto p = acc_map_.emplace(f, 0);
199 p.first->second = acc_.marks({acc_.add_set()});
200 t->acceptance_conditions |= p.first->second;
215 const state_set* ss = se->get_state();
216 return format_state_set(ss);
222 typename ns_map::const_iterator i;
223 for (i = name_state_map_.begin(); i != name_state_map_.end(); ++i)
225 taa_tgba::state::const_iterator i2;
226 os <<
"State: " << label_to_string(i->first) << std::endl;
227 for (i2 = i->second->begin(); i2 != i->second->end(); ++i2)
229 os <<
' ' << format_state_set((*i2)->dst)
230 <<
", C:" << (*i2)->condition
231 <<
", A:" << (*i2)->acceptance_conditions << std::endl;
237 typedef label label_t;
239 typedef std::unordered_map<label, taa_tgba::state*> ns_map;
240 typedef std::unordered_map<
const taa_tgba::state*, label,
243 ns_map name_state_map_;
244 sn_map state_name_map_;
247 virtual std::string label_to_string(
const label_t& lbl)
const = 0;
252 taa_tgba::state* add_state(
const label& name)
254 typename ns_map::iterator i = name_state_map_.find(name);
255 if (i == name_state_map_.end())
257 taa_tgba::state* s =
new taa_tgba::state;
258 name_state_map_[name] = s;
259 state_name_map_[s] = name;
266 taa_tgba::state_set* add_state_set(
const std::vector<label>& names)
268 state_set* ss =
new state_set;
269 for (
unsigned i = 0; i < names.size(); ++i)
270 ss->insert(add_state(names[i]));
271 state_set_vec_.push_back(ss);
275 std::string format_state_set(
const taa_tgba::state_set* ss)
const
277 state_set::const_iterator i1 = ss->begin();
278 typename sn_map::const_iterator i2;
280 return std::string(
"{}");
283 i2 = state_name_map_.find(*i1);
284 assert(i2 != state_name_map_.end());
285 return "{" + label_to_string(i2->second) +
"}";
289 std::string res(
"{");
290 while (i1 != ss->end())
292 i2 = state_name_map_.find(*i1++);
293 assert(i2 != state_name_map_.end());
294 res += label_to_string(i2->second);
297 res[res.size() - 1] =
'}';
316 virtual std::string label_to_string(
const std::string& label)
const;
319 typedef std::shared_ptr<taa_tgba_string> taa_tgba_string_ptr;
320 typedef std::shared_ptr<const taa_tgba_string> const_taa_tgba_string_ptr;
322 inline taa_tgba_string_ptr make_taa_tgba_string(
const bdd_dict_ptr& dict)
324 return std::make_shared<taa_tgba_string>(dict);
340 virtual std::string label_to_string(
const label_t& label)
const;
343 typedef std::shared_ptr<taa_tgba_formula> taa_tgba_formula_ptr;
344 typedef std::shared_ptr<const taa_tgba_formula> const_taa_tgba_formula_ptr;
346 inline taa_tgba_formula_ptr make_taa_tgba_formula(
const bdd_dict_ptr& dict)
348 return std::make_shared<taa_tgba_formula>(dict);
An Equivalence Relation for state*.
Definition: twa.hh:140
A Transition-based ω-Automaton.
Definition: twa.hh:482
A self-loop Transition-based Alternating Automaton (TAA) which is seen as a TGBA (abstract class...
Definition: taatgba.hh:35
Definition: taatgba.hh:102
Definition: formula.hh:1539
Abstract class for states.
Definition: twa.hh:42
A hash function for pointers.
Definition: hash.hh:39
Explicit transitions.
Definition: taatgba.hh:45
Iterate over the successors of a state.
Definition: twa.hh:331
virtual std::string format_state(const spot::state *s) const
Format the state as a string for printing.
Definition: taatgba.hh:211
Hash Function for state*.
Definition: twa.hh:164
Definition: taatgba.hh:303
Set of states deriving from spot::state.
Definition: taatgba.hh:78
Definition: taatgba.hh:147
void output(std::ostream &os) const
Output a TAA in a stream.
Definition: taatgba.hh:220