twa_graph: add support for universal initial states
The only missing point is that the HOA parser cannot deal with multiple universal initial states, as seen in parseaut.test. * spot/graph/graph.hh (new_univ_dests): New function, extracted from... (new_univ_edge): ... this one. * spot/twa/twagraph.hh (set_univ_init_state): Implement using new_univ_dests. * spot/twaalgos/dot.cc, spot/twaalgos/hoa.cc, python/spot/impl.i: Add support for universal initial states. * spot/parseaut/parseaut.yy: Add preliminary support for universal initial states. Multiple universal initial states are still not supported. * tests/core/alternating.test, tests/core/parseaut.test, tests/python/alternating.py: Adjust tests and exercise this new feature.
This commit is contained in:
parent
d5c9c34514
commit
48c812a595
9 changed files with 193 additions and 88 deletions
|
|
@ -268,6 +268,23 @@ namespace spot
|
|||
set_init_state(state_number(s));
|
||||
}
|
||||
|
||||
template<class I>
|
||||
void set_univ_init_state(I dst_begin, I dst_end)
|
||||
{
|
||||
auto ns = num_states();
|
||||
for (I i = dst_begin; i != dst_end; ++i)
|
||||
if (SPOT_UNLIKELY(*i >= ns))
|
||||
throw std::invalid_argument
|
||||
("set_univ_init_state() called with nonexisiting state");
|
||||
init_number_ = g_.new_univ_dests(dst_begin, dst_end);
|
||||
}
|
||||
|
||||
template<class I>
|
||||
void set_univ_init_state(const std::initializer_list<state_num>& il)
|
||||
{
|
||||
set_univ_init_state(il.begin(), il.end());
|
||||
}
|
||||
|
||||
state_num get_init_state_number() const
|
||||
{
|
||||
// If the automaton has no state, it has no initial state.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue