DiaDes  0.1
DIAgnosis of Discrete-Event System
Candidate.hh
Go to the documentation of this file.
1 #ifndef __DIADES__AUTOMATA__CANDIDATE__HH__
2 #define __DIADES__AUTOMATA__CANDIDATE__HH__
3 
13 #include <set>
14 #include <vector>
15 #include <boost/serialization/vector.hpp>
16 #include <boost/serialization/set.hpp>
17 #include <boost/archive/text_oarchive.hpp>
18 #include <boost/archive/text_iarchive.hpp>
19 #include <diades/utils/Verbose.hh>
20 #include <diades/graph/Graph.hh>
21 #include <diades/automata/Event.hh>
22 
23 
24 using std::set;
25 
26 
27 namespace Diades
28 {
29  namespace Automata
30  {
31 
38  class Candidate
39  {
40  public:
45 
49  typedef set<Event>::const_iterator FaultIterator;
50 
54  typedef set<Event>::size_type FaultSize;
55 
56 
57  private:
58  vector< StateId > _stateId;
59  vector< set<Event> > _faults;
60  public:
64  Candidate():_stateId(),_faults(){}
65 
72  Candidate(StateId stateId, const set<Event> & faults):
73  _stateId(1),_faults(1)
74  {
75  _stateId[0] = stateId;
76  _faults[0] = faults;
77  }
78 
85  Candidate(const vector<StateId> & stateId,
86  const vector< set<Event> > & faults):
87  _stateId(stateId),_faults(faults){}
88 
94  Candidate(const Candidate & candidate):_stateId(candidate._stateId),
95  _faults(candidate._faults){}
96 
97 
105  Candidate & operator=(const Candidate & candidate)
106  {
107  if(this != &candidate)
108  {
109  _stateId = candidate._stateId;
110  _faults = candidate._faults;
111  }
112  return *this;
113  }
114 
115 
122  const vector<StateId> & stateId() const { return _stateId; }
123 
130  const vector< set<Event> > & faults() const { return _faults; }
131 
138  FaultIterator begin(unsigned i) const { return _faults[i].begin(); }
139 
146  FaultIterator end(unsigned i) const { return _faults[i].end(); }
147 
154  FaultSize numberOfFaults() const {
155  unsigned number = 0;
156  for(const set<Event> & fset : faults())
157  {
158  number+= fset.size();
159  }
160  return number;
161  }
162 
169  bool isNormal() const { return numberOfFaults() == 0; }
170 
171 
178  bool isAbnormal() const { return !isNormal(); }
179 
180 
188  bool operator==(const Candidate & candidate) const
189  {
190  return (_stateId == candidate.stateId())
191  && (_faults == candidate._faults);
192  }
193 
194 
202  bool operator!= (const Candidate & candidate) const
203  {
204  return !(*this == candidate);
205  }
206 
207 
216  bool operator<(const Candidate & candidate) const;
217 
218 
222  string toString() const
223  {
224  stringstream stream;
225  stream << *this;
226  return stream.str();
227  }
228 
237  friend ostream & operator<<(ostream & os, const Candidate & candidate)
238  {
239  os << "[ ";
240  for(unsigned i = 0; i < candidate.stateId().size(); ++i)
241  {
242  os << "(" << candidate.stateId().operator[](i)
243  << ","
244  << toStream(candidate.begin(i),
245  candidate.end(i)) << ") ";
246  }
247  os << "]";
248  return os;
249  }
250 
251  private:
253 
262  template<class Archive>
263  void serialize(Archive & ar, const unsigned int version)
264  {
265  ar & _stateId;
266  ar & _faults;
267  }
268  };
269 
270 
271 
272  };
273 };
274 
275 namespace std
276 {
281  template<> struct hash<Diades::Automata::Candidate>
282  {
283  size_t operator()(const Diades::Automata::Candidate & candidate) const
284  {
285  return std::hash<std::string>()(candidate.toString());
286  }
287  };
288 };
289 
290 
291 
292 
293 #endif
Candidate(const vector< StateId > &stateId, const vector< set< Event > > &faults)
Definition: Candidate.hh:85
vector< set< Event > > _faults
Definition: Candidate.hh:59
friend ostream & operator<<(ostream &os, const Candidate &candidate)
Definition: Candidate.hh:237
size_t operator()(const Diades::Automata::Candidate &candidate) const
Definition: Candidate.hh:283
bool operator<(const Candidate &candidate) const
const vector< StateId > & stateId() const
Definition: Candidate.hh:122
set< Event >::size_type FaultSize
Definition: Candidate.hh:54
STL namespace.
friend class boost::serialization::access
Definition: Candidate.hh:252
bool operator!=(const Candidate &candidate) const
Definition: Candidate.hh:202
set< Event >::const_iterator FaultIterator
Definition: Candidate.hh:49
vector< StateId > _stateId
Definition: Candidate.hh:58
Candidate & operator=(const Candidate &candidate)
Definition: Candidate.hh:105
Namespace of the Diades project.
Diades::Utils::ToStream< InputIterator, Diades::Utils::AlwaysTrue< typename InputIterator::reference > > toStream(InputIterator first, InputIterator last)
Definition: Verbose.hh:143
FaultSize numberOfFaults() const
Definition: Candidate.hh:154
Candidate(StateId stateId, const set< Event > &faults)
Definition: Candidate.hh:72
SizeType NodeId
Definition: Node.hh:42
Diades::Graph::Node::NodeId StateId
Definition: Candidate.hh:44
FaultIterator begin(unsigned i) const
Definition: Candidate.hh:138
const vector< set< Event > > & faults() const
Definition: Candidate.hh:130
void serialize(Archive &ar, const unsigned int version)
Definition: Candidate.hh:263
Candidate(const Candidate &candidate)
Definition: Candidate.hh:94
bool operator==(const Candidate &candidate) const
Definition: Candidate.hh:188
FaultIterator end(unsigned i) const
Definition: Candidate.hh:146