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_;
70 ltl::formula_ptr_less_than> acc_map_;
82 set_state(
const taa_tgba::state_set* s,
bool delete_me =
false)
83 : s_(s), delete_me_(delete_me)
88 virtual size_t hash()
const;
97 const taa_tgba::state_set* get_state()
const;
99 const taa_tgba::state_set* s_;
109 virtual bool first();
111 virtual bool done()
const;
113 virtual set_state* current_state()
const;
114 virtual bdd current_condition()
const;
120 typedef taa_tgba::state::const_iterator iterator;
121 typedef std::pair<iterator, iterator> iterator_pair;
122 typedef std::vector<iterator_pair> bounds_t;
124 std::vector<taa_tgba::transition*>,
127 struct distance_sort :
128 public std::binary_function<const iterator_pair&,
129 const iterator_pair&, bool>
132 operator()(
const iterator_pair& lhs,
const iterator_pair& rhs)
const
134 return std::distance(lhs.first, lhs.second) <
135 std::distance(rhs.first, rhs.second);
139 std::vector<taa_tgba::transition*>::const_iterator i_;
140 std::vector<taa_tgba::transition*> succ_;
147 template<
typename label>
155 auto i = acc_map_.begin();
156 while (i != acc_map_.end())
157 (i++)->first->destroy();
160 void set_init_state(
const label& s)
162 std::vector<label> v(1);
166 void set_init_state(
const std::vector<label>& s)
168 init_ = add_state_set(s);
172 create_transition(
const label& s,
173 const std::vector<label>& d)
175 state* src = add_state(s);
176 state_set* dst = add_state_set(d);
179 t->condition = bddtrue;
180 t->acceptance_conditions = 0U;
186 create_transition(
const label& s,
const label& d)
188 std::vector<std::string> vec;
190 return create_transition(s, vec);
195 auto p = acc_map_.emplace(f, 0);
197 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;
251 virtual label_t clone_if(
const label_t& lbl)
const = 0;
256 taa_tgba::state* add_state(
const label& name)
258 typename ns_map::iterator i = name_state_map_.find(name);
259 if (i == name_state_map_.end())
261 const label& name_ = clone_if(name);
262 taa_tgba::state* s =
new taa_tgba::state;
263 name_state_map_[name_] = s;
264 state_name_map_[s] = name_;
271 taa_tgba::state_set* add_state_set(
const std::vector<label>& names)
273 state_set* ss =
new state_set;
274 for (
unsigned i = 0; i < names.size(); ++i)
275 ss->insert(add_state(names[i]));
276 state_set_vec_.push_back(ss);
280 std::string format_state_set(
const taa_tgba::state_set* ss)
const
282 state_set::const_iterator i1 = ss->begin();
283 typename sn_map::const_iterator i2;
285 return std::string(
"{}");
288 i2 = state_name_map_.find(*i1);
289 assert(i2 != state_name_map_.end());
290 return "{" + label_to_string(i2->second) +
"}";
294 std::string res(
"{");
295 while (i1 != ss->end())
297 i2 = state_name_map_.find(*i1++);
298 assert(i2 != state_name_map_.end());
299 res += label_to_string(i2->second);
302 res[res.size() - 1] =
'}';
320 virtual std::string label_to_string(
const std::string& label)
const;
321 virtual std::string clone_if(
const std::string& label)
const;
324 typedef std::shared_ptr<taa_tgba_string> taa_tgba_string_ptr;
325 typedef std::shared_ptr<const taa_tgba_string> const_taa_tgba_string_ptr;
327 inline taa_tgba_string_ptr make_taa_tgba_string(
const bdd_dict_ptr& dict)
329 return std::make_shared<taa_tgba_string>(dict);
344 virtual std::string label_to_string(
const label_t& label)
const;
345 virtual const ltl::formula* clone_if(
const label_t& label)
const;
348 typedef std::shared_ptr<taa_tgba_formula> taa_tgba_formula_ptr;
349 typedef std::shared_ptr<const taa_tgba_formula> const_taa_tgba_formula_ptr;
351 inline taa_tgba_formula_ptr make_taa_tgba_formula(
const bdd_dict_ptr& dict)
353 return std::make_shared<taa_tgba_formula>(dict);
An Equivalence Relation for state*.
Definition: twa.hh:138
A Transition-based ω-Automaton.
Definition: twa.hh:480
A self-loop Transition-based Alternating Automaton (TAA) which is seen as a TGBA (abstract class...
Definition: taatgba.hh:35
Definition: taatgba.hh:103
Definition: formula.hh:515
Abstract class for states.
Definition: twa.hh:40
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:329
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:162
Definition: taatgba.hh:308
Set of states deriving from spot::state.
Definition: taatgba.hh:79
Definition: taatgba.hh:148
void output(std::ostream &os) const
Output a TAA in a stream.
Definition: taatgba.hh:220