1 #ifndef __DIADES__AUTOMATA__TRACE_HH 2 #define __DIADES__AUTOMATA__TRACE_HH 27 return "Automata::Trace";
49 const unordered_map<State, State> & sources,
50 unordered_map<State, State> & targets,
55 const unordered_map<State, State> & sources,
57 unordered_map<State, State> & targets,
75 const vector<Event> & observations);
108 void extract(
const Trace & trace,
const Trace & projection,
const set<Event> & projectedEvents);
160 const set<Event> & projectedEvents);
250 bool isFinite(list< set<Event> > & combinations)
const;
266 }
catch (exception & e) {
267 throw Exception(
"initialState(): unable to get access to the initial state", e);
284 require(Exception, state.valid(),
"isAcceptor(), invalid state");
285 require(Exception, &state.owner() == &
behaviour(),
"isAcceptor(), the state does not belong to this trace");
286 return (state.valid()
288 && (_status[state] == 1));
289 }
catch (exception & e) {
290 throw Exception(
"isAcceptor(): unable to get the accepting status of the state", e);
301 require(Exception, state.valid(),
"setAcceptor(), invalid state");
302 require(Exception, &state.owner() == &
behaviour(),
"setAcceptor(), the state does not belong to this trace");
303 if (state.valid() && (&state.owner() == &
behaviour())) {
304 if (_status[state] == 0) {
306 _acceptors.insert(state);
309 }
catch (exception & e) {
310 throw Exception(
"setAcceptor(): unable to get the accepting status of the state", e);
321 require(Exception, state.valid(),
"setNonAcceptor(), invalid state");
322 require(Exception, &state.owner() == &
behaviour(),
"setNonAcceptor(), the state does not belong to this trace");
323 if (state.valid() && (&state.owner() == &
behaviour())) {
324 if (_status[state] == 1) {
326 _acceptors.erase(state);
329 }
catch (exception & e) {
330 throw Exception(
"setNonAcceptor(): unable to get the accepting status of the state", e);
342 return _acceptors.begin();
343 }
catch (exception & e) {
344 throw Exception(
"beginOfAcceptorStates(): unable to get the iterator", e);
346 return _acceptors.begin();
357 return _acceptors.end();
358 }
catch (exception & e) {
359 throw Exception(
"endOfAcceptorStates(): unable to get the iterator", e);
361 return _acceptors.end();
375 }
catch (exception & e) {
376 throw Exception(
"makeAllAcceptors(): unable to set the states as acceptor states", e);
391 }
catch (exception & e) {
392 throw Exception(
"makeAllNonAcceptors(): unable to set the states as non-acceptor states", e);
433 void trace2dot(
const string & filename)
const;
Graph::Graph & behaviour()
bool substract(const Trace &trace1, const Trace &trace2)
bool isContinuationFinite() const
bool complement(const Trace &trace, const set< Event > &events)
void setAcceptor(State state)
bool isAcceptor(State state) const
bool isFinite(list< set< Event > > &combinations) const
bool intersection(const Trace &trace1, const Trace &trace2)
bool extractBehaviours(const Component &comp, const ObservableMask &mask, const unordered_map< State, State > &sources, const Event &obs, unordered_map< State, State > &targets, unsigned level)
void extractObservableTrace(const ObservableComponent &comp, Event event, bool presence)
StateIterator stateBegin() const
void init(Graph &g, SizeType capacity=0, ValueType dflt=ValueType())
StateIterator stateEnd() const
void extractUnobservableBehaviours(const Component &comp, const ObservableMask &mask, const unordered_map< State, State > &sources, unordered_map< State, State > &targets, unsigned level)
void pruneSpuriousStates()
An observable Component defined as a automaton.
Diades::Graph::NodeIterator StateIterator
void trace2dot(const string &filename) const
Diades::Utils::Exception< Trace > Exception
virtual void mergeInfoStates(const vector< const Component *> &components, const vector< State > &states, State currentState)
void computeTrace(const Component &comp, Event event, bool presence)
InitialStateIterator initialStateBegin() const
Diades::Graph::NodeMap< int > _status
set of acceptor states
const unordered_set< State > & acceptors() const
static string typeName()
_status = 1 acceptor, non-acceptor otherwise
#define require(Exception, expr, message)
Namespace of the Diades project.
void makeAllNonAcceptors()
void setNonAcceptor(State state)
unordered_set< State >::const_iterator beginOfAcceptorStates() const
void extractAllObservableTraces(const ObservableComponent &comp)
unordered_set< State >::const_iterator endOfAcceptorStates() const
Diades::Graph::Node State
bool compose(const Trace &trace1, const Trace &trace2, const set< Event > &events)
const set< Event > & events() const
State initialState() const
unordered_set< State > _acceptors
bool project(const Trace &trace, const set< Event > &projectedEvents)
bool extract(const Component &comp, const ObservableMask &mask, const vector< Event > &observations)