DiaDes  0.1
DIAgnosis of Discrete-Event System
ControlPattern.hh
Go to the documentation of this file.
1 
9 #ifndef __DIADES__AUTOMATA__CONTROLPATTERN_HH__
10 #define __DIADES__AUTOMATA__CONTROLPATTERN_HH__
11 #include <unordered_set>
13 
14 namespace Diades
15 {
16  namespace Automata
17  {
18  namespace Experimental
19  {
20 
21 
36  template<typename Fsm>
38  {
39  public:
40  using Event = typename Fsm::EventPropertyId;
41  using Events = std::unordered_set<Event>;
42  using EventIterator = typename Events::const_iterator;
43 
44  private:
45  const Fsm & _fsm;
48 
49  public:
50 
56  ControlPattern(const Fsm & fsm):_fsm(fsm),_enabled(),_disabled()
57  {
58  _enabled.insert(_fsm.eventBegin(),_fsm.eventEnd());
59  }
60 
68  bool enabled(const Event & e) const
69  {
70  return _enabled.find(e) != _enabled.end();
71  };
72 
80  bool disabled(const Event & e) const
81  {
82  return _disabled.find(e) != _disabled.end();
83  };
84 
94  bool unknown(const Event & e) const
95  {
96  return !enabled(e) && !disabled(e);
97  };
98 
99 
110  bool enable(const Event & e)
111  {
112  if(!_fsm.containsEvent(e))
113  {
114  return false;
115  }
116  if(enabled(e))
117  {
118  return false;
119  }
120  _disabled.remove(e);
121  _enabled.insert(e);
122  return true;
123  };
124 
135  bool disable(const Event & e)
136  {
137  if(!_fsm.containsEvent(e))
138  {
139  return false;
140  }
141  if(disabled(e))
142  {
143  return false;
144  }
145  _enabled.erase(e);
146  _disabled.insert(e);
147  return true;
148  };
149 
155  {
156  return _enabled.begin();
157  }
163  {
164  return _enabled.begin();
165  }
171  {
172  return _disabled.begin();
173  }
179  {
180  return _disabled.begin();
181  }
182 
183  };
184 
185  }
186  }
187 }
188 #endif /* CONTROLPATTERN_HH */
189 
bool unknown(const Event &e) const
Check whether the event is currently unknown.
bool disabled(const Event &e) const
Check whether the event is currently disabled.
FaultyEventStateMachine< CandidateId, EventInfoId > Fsm
A control pattern is a mapping between the set of Events of a StateMachine and a Boolean.
EventIterator enabledEventEnd() const
end iterator over the range of enabled events
bool disable(const Event &e)
Disable an event of the StateMachine.
EventIterator disabledEventEnd() const
end iterator over the range of disabled events
bool enable(const Event &e)
Enable an event of the StateMachine.
Namespace of the Diades project.
ControlPattern(const Fsm &fsm)
Default constructor (every event is enabled)
typename Events::const_iterator EventIterator
bool enabled(const Event &e) const
Check whether the event is currently enabled.
EventIterator enabledEventBegin() const
start iterator over the range of enabled events
EventIterator disabledEventBegin() const
start iterator over the range of disabled events