DiaDes  0.1
DIAgnosis of Discrete-Event System
SpecialisedActiveDiagnoser.hh
Go to the documentation of this file.
1 /*
2  * SpecialisedActiveDiagnoser.hh
3  *
4  * Created on: 6 nov. 2008
5  * Modified : 11 dec 2009
6  * Author: ypencole
7  */
8 
9 #ifndef __DIADES__AUTOMATA__SPECIALISEDACTIVEDIAGNOSER__HH
10 #define __DIADES__AUTOMATA__SPECIALISEDACTIVEDIAGNOSER__HH
11 
12 #include"ObservableComponent.hh"
13 #include"Trace.hh"
14 
15 namespace Diades
16 {
17  namespace Automata
18  {
19 
20 
24  class SpecialisedActiveDiagnoserInvalid : public runtime_error, public domain_error
25  {
26 
27  public:
31  SpecialisedActiveDiagnoserInvalid(const string& whatArg) : runtime_error(whatArg), domain_error(whatArg)
32  {
33  cerr << "EXCEPTION SpecialisedActiveDiagnoser -> " << whatArg << endl;
34  }
35  };
36 
37 
38 
40  {
41  public:
42  typedef enum {Undiscriminable,Discriminable,Safe,Sure} Tag;
43 
44  private:
46  string _eventLabel;
47  unordered_map<Event, pair<string, Event> > _observables;
50 
51  // input from Nicolas Bussac
52  int _nemax;
54 
55  void computeActiveDiagnoser(const ObservableComponent & model, Event event);
56  void setDiscriminableTags(const list<State> & sureStates);
57 
58  public:
60  virtual ~SpecialisedActiveDiagnoser();
61  Tag tag(State s) const { return _tags[s]; }
62  Event event() const { return _event; }
63  State initialState() const { return *initialStateBegin(); }
64  string eventLabel() const { return _eventLabel; }
65  void diagnoser2Dot(const string & filename) const;
66  const string & nameOfObservable(Event event) const {
67  unordered_map<Event, pair<string,Event> >::const_iterator it = _observables.find(event);
68  require(SpecialisedActiveDiagnoserInvalid,it != _observables.end(),"nameOfObservable: unknown code.");
69  return it->second.first;
70  }
71  bool isHole(State state) const { return state == _hole; }
72  int nemax() {
73  return _nemax;
74  }
75  };
76 
77  };
78 };
79 
80 #endif
81 
Tag
Definition: TagStates.cc:160
An observable Component defined as a automaton.
#define require(Exception, expr, message)
Definition: Assertion.hh:90
Namespace of the Diades project.
Diades::Graph::Node State
Definition: BeliefState.hh:36
unordered_map< Event, pair< string, Event > > _observables