faudes::SccFilter Class Reference
|
Public Types | |
enum | FMode { FmNoFilter = 0x00, FmFindFirst = 0x01, FmIgnoreTrivial = 0x02, FmStatesAvoid = 0x10, FmStatesRequire = 0x20, FmEventsAvoid = 0x40, FmIgnoreLiveLocks = 0x1000, FmLiveLocksOnly = 0x2000, FmIgnoreUnaccessible = 0x4000 } |
Typedef for filter modes. More... | |
Public Member Functions | |
SccFilter (void) | |
Constructor (no filter). | |
SccFilter (const SccFilter &rSrc) | |
Constructor (copy constructor). | |
SccFilter (int mode, const Generator &rGen) | |
Constructor (from flags w.r.t. | |
SccFilter (int mode, const StateSet &rStatesAvoidRequire) | |
Constructor (from flags and state set, either avoid or require). | |
SccFilter (int mode, const StateSet &rStatesAvoid, const StateSet &rStatesRequire) | |
Constructor (from flags and state sets). | |
SccFilter (int mode, const EventSet &rEventsAvoid) | |
Constructor (from flags and event sets). | |
SccFilter (int mode, const StateSet &rStatesAvoid, const StateSet &rStatesRequire, const EventSet &rEventsAvoid) | |
Constructor (from flags and sets). | |
~SccFilter (void) | |
Destructor. | |
int | Mode (void) const |
Member access. | |
const StateSet & | StatesAvoid (void) const |
Member access. | |
const StateSet & | StatesRequire (void) const |
Member access. | |
void | Clear (void) |
Edit filter (RTI): no filter. | |
void | StatesAvoid (const StateSet &rStatesAvoid) |
Edit filter (RTI): set avoid states. | |
void | StatesRequire (const StateSet &rStatesRequire) |
Edit filter (RTI): set required states. | |
void | EventsAvoid (const EventSet &rEventsAvoid) |
Edit filter (RTI): set avoid events. | |
void | IgnoreTrivial (bool flag) |
Edit filter (RTI): ignore trivial. | |
void | FindFirst (bool flag) |
Edit filter (RTI): find first. | |
Protected Member Functions | |
void | MergeStatesAvoid (const StateSet &rStatesAvoid) |
Edit filter (RTI): avoid states. | |
Protected Attributes | |
int | mMode |
Flag, combining bit masks from Mode. | |
const StateSet * | pStatesAvoid |
States to avoid (if flag StatesAvoid is set). | |
const StateSet * | pStatesRequire |
States to require (if flag StatesRequire is set). | |
const EventSet * | pEventsAvoid |
Events to avoid (if flag EventssAvoid is set). | |
StateSet * | mpStatesAvoid |
Local sets (optional). | |
StateSet * | mpStatesRequire |
EventSet * | mpEventsAvoid |
Static Protected Attributes | |
static const StateSet | msEmptyStates = StateSet() |
Static emptysets. | |
static const EventSet | msEmptyEvents = EventSet() |
Friends | |
void | SearchScc (const Idx vState, int &vRcount, const Generator &rGen, const SccFilter &rFilter, StateSet &rTodo, std::stack< Idx > &rStack, StateSet &rStackStates, std::map< const Idx, int > &rDfn, std::map< const Idx, int > &rLowLnk, std::list< StateSet > &rSccList, StateSet &rRoots) |
Search for strongly connected components (SCC). | |
bool | ComputeNextScc (const Generator &rGen, SccFilter &rFilter, StateSet &rScc) |
Compute next SCC. |
Filter for strictly connected components (SCC) search/compute routines.
When ComputeScc()/HasScc()/NextScc() traverse a specified transition sytem in their search, a SccFilter parameter can mute certain transitions. The respective filter conditions are set by the constructor and consist of a flag word (mMode) and additional parameters (depending on the flags). The Flags can be combined from the following:
Convenience modes set up the state related filter conditions from the set of marked states:
Technical note: SccFilters interally use references to condition parameters that are required to exist during the life time of the filter object.
Technical note: currently, there is no EventsRequire filter because the implementation interprets the transition relation primarily from a directed graph perspective; while StatesRequire makes sense for marked states semantics, we are not aware of any applications for a corresponding version of EventsRequire; please let us know if you require such an extension.
Definition at line 64 of file cfl_graphfncts.h.
Typedef for filter modes.
FmNoFilter | |
FmFindFirst | |
FmIgnoreTrivial | |
FmStatesAvoid | |
FmStatesRequire | |
FmEventsAvoid | |
FmIgnoreLiveLocks | |
FmLiveLocksOnly | |
FmIgnoreUnaccessible |
Definition at line 88 of file cfl_graphfncts.h.
faudes::SccFilter::SccFilter | ( | void | ) |
Constructor (no filter).
Definition at line 50 of file cfl_graphfncts.cpp.
faudes::SccFilter::SccFilter | ( | const SccFilter & | rSrc | ) |
Constructor (copy constructor).
Definition at line 62 of file cfl_graphfncts.cpp.
faudes::SccFilter::SccFilter | ( | int | mode, | |
const Generator & | rGen | |||
) |
faudes::SccFilter::SccFilter | ( | int | mode, | |
const StateSet & | rStatesAvoidRequire | |||
) |
Constructor (from flags and state set, either avoid or require).
Definition at line 93 of file cfl_graphfncts.cpp.
faudes::SccFilter::SccFilter | ( | int | mode, | |
const StateSet & | rStatesAvoid, | |||
const StateSet & | rStatesRequire | |||
) |
Constructor (from flags and state sets).
Definition at line 113 of file cfl_graphfncts.cpp.
faudes::SccFilter::SccFilter | ( | int | mode, | |
const EventSet & | rEventsAvoid | |||
) |
Constructor (from flags and event sets).
Definition at line 74 of file cfl_graphfncts.cpp.
faudes::SccFilter::SccFilter | ( | int | mode, | |
const StateSet & | rStatesAvoid, | |||
const StateSet & | rStatesRequire, | |||
const EventSet & | rEventsAvoid | |||
) |
Constructor (from flags and sets).
faudes::SccFilter::~SccFilter | ( | void | ) |
Destructor.
Definition at line 43 of file cfl_graphfncts.cpp.
void faudes::SccFilter::Clear | ( | void | ) |
Edit filter (RTI): no filter.
Definition at line 163 of file cfl_graphfncts.cpp.
void faudes::SccFilter::EventsAvoid | ( | const EventSet & | rEventsAvoid | ) |
Edit filter (RTI): set avoid events.
Definition at line 201 of file cfl_graphfncts.cpp.
void faudes::SccFilter::FindFirst | ( | bool | flag | ) |
Edit filter (RTI): find first.
Definition at line 215 of file cfl_graphfncts.cpp.
void faudes::SccFilter::IgnoreTrivial | ( | bool | flag | ) |
Edit filter (RTI): ignore trivial.
Definition at line 209 of file cfl_graphfncts.cpp.
void faudes::SccFilter::MergeStatesAvoid | ( | const StateSet & | rStatesAvoid | ) | [protected] |
Edit filter (RTI): avoid states.
Definition at line 193 of file cfl_graphfncts.cpp.
int faudes::SccFilter::Mode | ( | void | ) | const [inline] |
Member access.
Definition at line 126 of file cfl_graphfncts.h.
void faudes::SccFilter::StatesAvoid | ( | const StateSet & | rStatesAvoid | ) |
Edit filter (RTI): set avoid states.
Definition at line 177 of file cfl_graphfncts.cpp.
const StateSet& faudes::SccFilter::StatesAvoid | ( | void | ) | const [inline] |
Member access.
Definition at line 129 of file cfl_graphfncts.h.
void faudes::SccFilter::StatesRequire | ( | const StateSet & | rStatesRequire | ) |
Edit filter (RTI): set required states.
Definition at line 185 of file cfl_graphfncts.cpp.
const StateSet& faudes::SccFilter::StatesRequire | ( | void | ) | const [inline] |
Member access.
Definition at line 132 of file cfl_graphfncts.h.
Compute next SCC.
This function provides an API for the iterative computation of SCCs. It invokes SearchScc() to find the next SCC and then adds the SCC to the StatesAvoid Filter. This approach is not computationally efficient but it allows for simple Lua wrappers.
rGen | Generator under investigation | |
rFilter | Filter out specified transitions | |
rScc | First SCC that has been found, empty if no such. |
void SearchScc | ( | const Idx | vState, | |
int & | vRcount, | |||
const Generator & | rGen, | |||
const SccFilter & | rFilter, | |||
StateSet & | rTodo, | |||
std::stack< Idx > & | rStack, | |||
StateSet & | rStackStates, | |||
std::map< const Idx, int > & | rDfn, | |||
std::map< const Idx, int > & | rLowLnk, | |||
std::list< StateSet > & | rSccList, | |||
StateSet & | rRoots | |||
) | [friend] |
Search for strongly connected components (SCC).
This function partitions the stateset of a generator into equivalent classes such that states x1 and x2 are equivalent iff there is a path from x1 to x2 AND a path from x2 to x1.
This function implements the algorithm based on a recursive depth first search presented in:
-- Aho, Hopcroft, Ullman: The Design and Analysis of Computer Algorithms --
While the original algorithm works on a directed graph, this implementation adds some features that refer to transition systems and allow to filter SCCs on the run. The filter condition is specified by the SccFilter parameter rFilter.
Note: this version is derived from earlier implementations used in various plug-ins; in due course, this version will replace earlier versions.
Note: Due to the recursive implementation, this function requires a stack size proportional to the largest SCC. We have experienced typical default configurations to be good for a depth of about 80000 (Mac OSX 10.6, Debian 7.4). For SCCs exceeding the default stack size, you may adjust the operating system parameters accordingly. On Unix/Linux/MacOsX this is done by the shell command "ulimit -s hard". A future revision of SearchSCC() may be re-designed to circumvent this inconvenient issue.
Note: for a convenience API see also ComputeScc()
vState | State, from which the current recursion is started. | |
vRcount | Denotes the current depth of the recursion. | |
rGen | Transition system to investigate | |
rFilter | Filter out specified transitions | |
rTodo | Set of states that up to now were not found by the depth first search. | |
rStack | Stack of states to represent current path. | |
rStackStates | Set of states that are in rStack | |
rDfn | Map assigning to each state idx its Depth-First Number. | |
rLowLnk | Map assigning to each state its LOWLINK Number. | |
rSccList | Set SCCs (accumulative result). | |
rRoots | Set of states that each are root of some SCC (accumulative result). |
int faudes::SccFilter::mMode [protected] |
Flag, combining bit masks from Mode.
Definition at line 159 of file cfl_graphfncts.h.
EventSet* faudes::SccFilter::mpEventsAvoid [protected] |
Definition at line 170 of file cfl_graphfncts.h.
StateSet* faudes::SccFilter::mpStatesAvoid [protected] |
Local sets (optional).
Definition at line 168 of file cfl_graphfncts.h.
StateSet* faudes::SccFilter::mpStatesRequire [protected] |
Definition at line 169 of file cfl_graphfncts.h.
const EventSet faudes::SccFilter::msEmptyEvents = EventSet() [static, protected] |
Definition at line 174 of file cfl_graphfncts.h.
const StateSet faudes::SccFilter::msEmptyStates = StateSet() [static, protected] |
Static emptysets.
Definition at line 173 of file cfl_graphfncts.h.
const EventSet* faudes::SccFilter::pEventsAvoid [protected] |
Events to avoid (if flag EventssAvoid is set).
Definition at line 165 of file cfl_graphfncts.h.
const StateSet* faudes::SccFilter::pStatesAvoid [protected] |
States to avoid (if flag StatesAvoid is set).
Definition at line 161 of file cfl_graphfncts.h.
const StateSet* faudes::SccFilter::pStatesRequire [protected] |
States to require (if flag StatesRequire is set).
Definition at line 163 of file cfl_graphfncts.h.
libFAUDES 2.23h --- 2014.04.03 --- c++ api documentaion by doxygen