DiaDes  0.1
DIAgnosis of Discrete-Event System
LocalCandidate.hh
Go to the documentation of this file.
1 /*
2  * File: LocalCandidate.hh
3  * Author:
4  *
5  * Created on 24 octobre 2017, 19:12
6  */
7 
8 #ifndef __DIADES__AUTOMATA__EXPERIMENTAL__LOCALCANDIDATE__HH__
9 #define __DIADES__AUTOMATA__EXPERIMENTAL__LOCALCANDIDATE__HH__
10 
11 
12 
13 
14 namespace Diades
15 {
16  namespace Automata
17  {
18  namespace Experimental
19  {
30  template<typename StateProperty,typename FaultProperty>
32  {
33  public:
34  typedef StateProperty State;
35  typedef FaultProperty Faults;
36 
37  private:
38  State _state;
39  Faults _faults;
40 
41  public:
42 
46  LocalCandidate():_state(),_faults(){}
47 
48 
52  LocalCandidate(const LocalCandidate & candidate):
53  _state(candidate.state()),
54  _faults(candidate.faults()){}
55 
60  _state(candidate.state()),
61  _faults(candidate.faults()){}
62 
68  LocalCandidate(const State & state,
69  const Faults & faults):_state(state),_faults(faults){}
70 
71 
76  {
77  if(this != &candidate)
78  {
79  _state = candidate._state;
80  _faults = candidate._faults;
81  }
82  return *this;
83  }
84 
89 
90 
94  bool operator==(const LocalCandidate & candidate) const
95  {
96  return (candidate.state() == _state) && (candidate.faults()==_faults);
97  }
98 
102  bool operator!=(const LocalCandidate & candidate) const
103  {
104  return !( *this == candidate);
105  }
106 
110  const State & state() const
111  {
112  return _state;
113  }
114 
118  const Faults & faults() const
119  {
120  return _faults;
121  }
122 
123  };
124 
125 
133  template<typename StateProperty, typename FaultProperty>
134  ostream & operator<<(ostream & os, const LocalCandidate<StateProperty,FaultProperty> & candidate)
135  {
136  return os << candidate.state() << " " << candidate.faults();
137  }
138 
139  };
140  };
141 };
142 namespace std
143 {
148  template <typename StateProperty, typename FaultProperty>
149  struct hash<Diades::Automata::Experimental::LocalCandidate<StateProperty,FaultProperty> >
150  {
152  {
153  std::size_t seed = 0;
154  std::size_t value = std::hash<StateProperty>()(candidate.state());
155  seed ^= value + 0x9e3779b9 + (seed<<6) + (seed>>2);
156  value = std::hash<FaultProperty>()(candidate.faults());
157  seed ^= value + 0x9e3779b9 + (seed<<6) + (seed>>2);
158  return seed;
159  }
160  };
161 
162 
163 };
164 
165 #endif /* CANDIDATE_HH */
166 
LocalCandidate(const State &state, const Faults &faults)
bool operator==(const LocalCandidate &candidate) const
bool operator!=(const LocalCandidate &candidate) const
STL namespace.
size_t operator()(Diades::Automata::Experimental::LocalCandidate< StateProperty, FaultProperty > const &candidate) const
Namespace of the Diades project.
LocalCandidate(const LocalCandidate &candidate)
LocalCandidate & operator=(const LocalCandidate &candidate)