tgba: Implement a tgbagraph subclass
* src/tgba/tgbagraph.hh: New file. * src/tgba/Makefile.am: Add it. * src/graph/graph.hh: Add methods needed by tgbagraph.hh. * src/graphtest/tgbagraph.cc, src/graphtest/tgbagraph.test: New files. * src/graphtest/Makefile.am: Add them.
This commit is contained in:
parent
f968c4ed67
commit
1f70e6742d
6 changed files with 494 additions and 5 deletions
|
|
@ -24,7 +24,7 @@
|
|||
#include <vector>
|
||||
#include <type_traits>
|
||||
#include <tuple>
|
||||
|
||||
#include <cassert>
|
||||
|
||||
namespace spot
|
||||
{
|
||||
|
|
@ -197,7 +197,7 @@ namespace spot
|
|||
trans_storage_t&>::type
|
||||
operator*()
|
||||
{
|
||||
return g_->transitions_[t_];
|
||||
return g_->trans_storage(t_);
|
||||
}
|
||||
|
||||
trans_iterator operator++()
|
||||
|
|
@ -244,6 +244,11 @@ namespace spot
|
|||
return {nullptr, 0};
|
||||
}
|
||||
|
||||
void recycle(transition t)
|
||||
{
|
||||
t_ = t;
|
||||
}
|
||||
|
||||
protected:
|
||||
transition t_;
|
||||
Graph* g_;
|
||||
|
|
@ -309,6 +314,16 @@ namespace spot
|
|||
transitions_.resize(1);
|
||||
}
|
||||
|
||||
unsigned num_states() const
|
||||
{
|
||||
return states_.size();
|
||||
}
|
||||
|
||||
unsigned num_transitions() const
|
||||
{
|
||||
return transitions_.size();
|
||||
}
|
||||
|
||||
template <typename... Args>
|
||||
state new_state(Args&&... args)
|
||||
{
|
||||
|
|
@ -317,11 +332,26 @@ namespace spot
|
|||
return s;
|
||||
}
|
||||
|
||||
state_storage_t&
|
||||
state_storage(state s)
|
||||
{
|
||||
assert(s < states_.size());
|
||||
return states_[s];
|
||||
}
|
||||
|
||||
const state_storage_t&
|
||||
state_storage(state s) const
|
||||
{
|
||||
assert(s < states_.size());
|
||||
return states_[s];
|
||||
}
|
||||
|
||||
// Do not use State_Data& as return type, because State_Data might
|
||||
// be void.
|
||||
typename state_storage_t::data_t&
|
||||
state_data(state s)
|
||||
{
|
||||
assert(s < states_.size());
|
||||
return states_[s].data();
|
||||
}
|
||||
|
||||
|
|
@ -329,17 +359,49 @@ namespace spot
|
|||
const typename state_storage_t::data_t&
|
||||
state_data(state s) const
|
||||
{
|
||||
assert(s < states_.size());
|
||||
return states_[s].data();
|
||||
}
|
||||
|
||||
trans_storage_t&
|
||||
trans_storage(transition s)
|
||||
{
|
||||
assert(s < transitions_.size());
|
||||
return transitions_[s];
|
||||
}
|
||||
|
||||
const trans_storage_t&
|
||||
trans_storage(transition s) const
|
||||
{
|
||||
assert(s < transitions_.size());
|
||||
return transitions_[s];
|
||||
}
|
||||
|
||||
typename trans_storage_t::data_t&
|
||||
trans_data(transition s)
|
||||
{
|
||||
assert(s < transitions_.size());
|
||||
return transitions_[s].data();
|
||||
}
|
||||
|
||||
const typename trans_storage_t::data_t&
|
||||
trans_data(transition s) const
|
||||
{
|
||||
assert(s < transitions_.size());
|
||||
return transitions_[s].data();
|
||||
}
|
||||
|
||||
template <typename... Args>
|
||||
transition
|
||||
new_transition(state src, out_state dst, Args&&... args)
|
||||
{
|
||||
assert(src < states_.size());
|
||||
|
||||
transition t = transitions_.size();
|
||||
transitions_.emplace_back(dst, 0, std::forward<Args>(args)...);
|
||||
|
||||
transition st = states_[src].succ_tail;
|
||||
assert(st < t || !st);
|
||||
if (!st)
|
||||
states_[src].succ = t;
|
||||
else
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue