This class explores (with a DFS) a product between a system and a twa. This exploration is performed on-the-fly. Since this exploration aims to be a generic we need to define hooks to the various emptiness checks. Actually, we use "mixins templates" in order to efficiently call emptiness check procedure. This means that we add a template EmptinessCheck that will be called though four functions:
More...
#include <spot/mc/intersect.hh>
|
| intersect (kripkecube< State, SuccIterator > &sys, twacube_ptr twa, unsigned tid, bool &stop) |
|
EmptinessCheck & | self () |
| In order to implement "mixin paradigm", we must be abble to access the acual definition of the emptiness check that, in turn, has to access local variables. More...
|
|
bool | run () |
| The main function that will perform the product on-the-fly and call the emptiness check when necessary. More...
|
|
unsigned int | states () |
|
unsigned int | trans () |
|
std::string | counterexample () |
|
virtual istats | stats () |
|
|
kripkecube< State, SuccIterator > & | sys_ |
|
twacube_ptr | twa_ |
|
std::vector< todo_element > | todo |
|
visited_map | map |
|
unsigned int | dfs_number = 0 |
|
unsigned int | transitions = 0 |
|
unsigned | tid_ |
|
bool & | stop_ |
|
|
void | forward_iterators (bool just_pushed) |
| Find the first couple of iterator (from the top of the todo stack) that intersect. The parameter indicates wheter the state has just been pushed since the underlying job is slightly different. More...
|
|
template<typename State, typename SuccIterator, typename StateHash, typename StateEqual, typename EmptinessCheck>
class spot::intersect< State, SuccIterator, StateHash, StateEqual, EmptinessCheck >
This class explores (with a DFS) a product between a system and a twa. This exploration is performed on-the-fly. Since this exploration aims to be a generic we need to define hooks to the various emptiness checks. Actually, we use "mixins templates" in order to efficiently call emptiness check procedure. This means that we add a template EmptinessCheck that will be called though four functions:
- setup: called before any operation
- push: called for every new state
- pop: called every time a state leave the DFS stack
- update: called for every closing edge
- trace: must return a counterexample (if exists)
The other template parameters allows to consider any kind of state (and so any kind of kripke structures).
◆ forward_iterators()
template<typename State, typename SuccIterator, typename StateHash, typename StateEqual, typename EmptinessCheck>
void spot::intersect< State, SuccIterator, StateHash, StateEqual, EmptinessCheck >::forward_iterators |
( |
bool |
just_pushed | ) |
|
|
inlineprotected |
Find the first couple of iterator (from the top of the todo stack) that intersect. The parameter indicates wheter the state has just been pushed since the underlying job is slightly different.
◆ run()
template<typename State, typename SuccIterator, typename StateHash, typename StateEqual, typename EmptinessCheck>
bool spot::intersect< State, SuccIterator, StateHash, StateEqual, EmptinessCheck >::run |
( |
| ) |
|
|
inline |
The main function that will perform the product on-the-fly and call the emptiness check when necessary.
◆ self()
template<typename State, typename SuccIterator, typename StateHash, typename StateEqual, typename EmptinessCheck>
EmptinessCheck& spot::intersect< State, SuccIterator, StateHash, StateEqual, EmptinessCheck >::self |
( |
| ) |
|
|
inline |
In order to implement "mixin paradigm", we must be abble to access the acual definition of the emptiness check that, in turn, has to access local variables.
The documentation for this class was generated from the following file: