21 #include <spot/kripke/fairkripke.hh>
22 #include <spot/twacube/cube.hh>
24 #include <type_traits>
37 template<
typename State,
typename SuccIterator>
39 public std::enable_shared_from_this<kripkecube<State, SuccIterator>>
50 std::string
to_string(
const State,
unsigned tid)
const;
53 SuccIterator*
succ(
const State,
unsigned tid);
57 void recycle(SuccIterator*,
unsigned tid);
60 const std::vector<std::string>
ap();
69 template <
typename T,
typename State,
typename SuccIter>
73 using yes = std::true_type;
74 using no = std::false_type;
77 template<
typename U,
typename V>
static auto test_kripke(
U u, V v)
80 std::is_same<State, decltype(u->initial(0))>::value &&
81 std::is_same<
unsigned, decltype(u->get_threads())>::value &&
82 std::is_same<std::string, decltype(u->to_string(State(), 0))>::value &&
83 std::is_same<SuccIter*, decltype(u->succ(State(), 0))>::value &&
84 std::is_same<
void, decltype(u->recycle(
nullptr, 0))>::value &&
85 std::is_same<
const std::vector<std::string>,
86 decltype(u->ap())>::value &&
87 std::is_same<
void, decltype(u->recycle(
nullptr, 0))>::value &&
90 std::is_same<
void, decltype(v->next())>::value &&
91 std::is_same<
bool, decltype(v->done())>::value &&
92 std::is_same<State, decltype(v->state())>::value &&
93 std::is_same<
spot::cube, decltype(v->condition())>::value
99 template<
typename,
typename>
static no test_kripke(...);
105 static constexpr
bool value =
106 std::is_same< decltype(test_kripke<T, SuccIter*>(
nullptr,
nullptr)), yes
149 virtual bdd
cond()
const override;
Interface for a Fair Kripke structure.
Definition: fairkripke.hh:87
This class allows to ensure (at compile time) if a given parameter is of type kripkecube....
Definition: kripke.hh:71
Iterator code for Kripke structure.
Definition: kripke.hh:130
void recycle(const bdd &cond)
Reset the iterator's condition to cond for reuse.
Definition: kripke.hh:142
virtual bdd cond() const override
Get the condition on the edge leading to this successor.
bdd cond_
BDD condition returned by cond().
Definition: kripke.hh:152
kripke_succ_iterator(const bdd &cond)
Constructor.
Definition: kripke.hh:136
virtual acc_cond::mark_t acc() const override
Get the acceptance mark of the edge leading to this successor.
Interface for a Kripke structure.
Definition: kripke.hh:178
kripke(const bdd_dict_ptr &d)
Construct with BDD dictionary d.
Definition: kripke.hh:181
virtual acc_cond::mark_t state_acceptance_mark(const state *) const override
The acceptance mark that labels state s.
This class is a template representation of a Kripke structure. It is composed of two template paramet...
Definition: kripke.hh:40
std::string to_string(const State, unsigned tid) const
Provides a string representation of the parameter state.
const std::vector< std::string > ap()
This method allows to deallocate a given state.
unsigned get_threads()
Returns the number of threads that are handled by the kripkecube.
SuccIterator * succ(const State, unsigned tid)
Returns an iterator over the successors of the parameter state.
State initial(unsigned tid)
Returns the initial State of the System. The tid parameter is used internally for sharing this struct...
void recycle(SuccIterator *, unsigned tid)
Allocation and deallocation of iterator is costly. This method allows to reuse old iterators.
Abstract class for states.
Definition: twa.hh:49
Iterate over the successors of a state.
Definition: twa.hh:425
std::shared_ptr< kripke > kripke_ptr
Definition: fwd.hh:33
std::shared_ptr< const kripke > const_kripke_ptr
Definition: fwd.hh:39
std::shared_ptr< bdd_dict > bdd_dict_ptr
Shared pointer to a bdd_dict.
Definition: bdddict.hh:304
unsigned * cube
A cube is only a set of bits in memory.
Definition: cube.hh:66
Definition: automata.hh:26
An acceptance mark.
Definition: acc.hh:76