DiaDes  0.1
DIAgnosis of Discrete-Event System
Chronicle.hh
Go to the documentation of this file.
1 #ifndef __DIADES__PETRI__CHRONICLE_HH_
2 #define __DIADES__PETRI__CHRONICLE_HH_
3 
4 #include <fstream>
6 #include <diades/utils/Box.hh>
9 
10 namespace Diades
11 {
12  using namespace Utils;
13 
14  namespace Petri
15  {
16  class Chronicle : public TimeNet, public PriorityPetriNet
17  {
18  public:
19  static std::string typeName() { return "Chronicle"; }
21  typedef enum {Basic,Sequence,Divergence,Convergence} ChronicleType;
23 
24  private:
25  set<Place> _oks;
26  set<Place> _kos;
27  set<Place> _init;
28  ChronicleType _type;
29  public:
30 
31  ChronicleType type() const
32  {
33  return _type;
34  }
35  Chronicle();
36  Chronicle(const Event & event,int minTime);
37  Chronicle(const Event & event, int minTime, int maxTime, bool presence);
38  Chronicle(const vector< ChronicleBox > & chronicles, ChronicleType type);
39 
40  private:
41  void sequence(const vector< ChronicleBox > & chronicles);
42  void divergence(const vector< ChronicleBox > & chronicles);
43  void convergence(const vector< ChronicleBox > & chronicles);
44 
45 
46 
47  public:
48 
50  {
51  return TimeNet::beginOfPlaces();
52  }
53 
55  {
56  return TimeNet::endOfPlaces();
57  }
59  {
60  return TimeNet::beginOfTransitions();
61  }
62 
64  {
65  return TimeNet::endOfTransitions();
66  }
67  const string & labelOfPlace(Place p) const
68  {
69  return TimeNet::labelOfPlace(p);
70  }
71 
77  TimeNet::ConstIterator preBegin(const Transition & transition) const
78  {
79  return TimeNet::preBegin(transition);
80  }
81 
87  TimeNet::ConstIterator preEnd(const Transition & transition) const
88  {
89  return TimeNet::preEnd(transition);
90  }
91 
97  TimeNet::ConstIterator postBegin(const Transition & transition) const
98  {
99  return TimeNet::postBegin(transition);
100  }
101 
102 
108  TimeNet::ConstIterator postEnd(const Transition & transition) const
109  {
110  return TimeNet::postEnd(transition);
111  }
112 
118  const Event & getEvent(Transition t) const
119  {
120  return TimeNet::getEvent(t);
121  }
122 
123 
130  size_t numberOfTransitions() const
131  {
132  return TimeNet::numberOfTransitions();
133  }
134 
141  size_t numberOfPlaces() const
142  {
143  return TimeNet::numberOfPlaces();
144  }
145 
146 
147  void setOk(Place p)
148  {
149  _kos.erase(p);
150  _oks.insert(p);
151  }
152  bool isOk(Place p) const
153  {
154  return _oks.find(p) != _oks.end();
155  }
156 
157  void setKo(Place p)
158  {
159  _oks.erase(p);
160  _kos.insert(p);
161  }
162  bool isKo(Place p) const
163  {
164  return _kos.find(p) != _kos.end();
165  }
166 
167  const set<Place> & init() const
168  {
169  return _init;
170  }
171 
172  void setInit(Place p)
173  {
174  _init.insert(p);
175  }
176 
177 
178  bool isInit(Place p) const
179  {
180  return _init.find(p) != _init.end();
181  }
182 
183 
184 
185  virtual void net2Tina(ostream & os) const;
186 
187  virtual void net2Tina(const string & name) const
188  {
189  ofstream file(name.c_str());
190  net2Tina(file);
191  file.close();
192  }
193 
194  virtual void net2Dot(const string & name) const;
195 
196 
197  static vector<Chronicle *> _chronicles;
198 
199  static Chronicle & event(const Event & event,int minTime);
200  static Chronicle & event(const Event & event, int minTime, int maxTime);
201  static Chronicle & noevent(const Event & event, int minTime, int maxTime);
202 
203  static Chronicle & div(const vector< ChronicleBox > & chronicles);
204  static Chronicle & div(const Chronicle & ch1, const Chronicle & ch2);
205  static Chronicle & div(const Chronicle & ch1, const Chronicle & ch2,
206  const Chronicle & ch3);
207  static Chronicle & div(const Chronicle & ch1, const Chronicle & ch2,
208  const Chronicle & ch3, const Chronicle & ch4);
209  static Chronicle & div(const Chronicle & ch1, const Chronicle & ch2,
210  const Chronicle & ch3, const Chronicle & ch4,
211  const Chronicle & ch5);
212  static Chronicle & conv(const vector< ChronicleBox > & chronicles);
213  static Chronicle & conv(const Chronicle & ch1, const Chronicle & ch2);
214  static Chronicle & conv(const Chronicle & ch1, const Chronicle & ch2,
215  const Chronicle & ch3);
216  static Chronicle & conv(const Chronicle & ch1, const Chronicle & ch2,
217  const Chronicle & ch3, const Chronicle & ch4);
218  static Chronicle & conv(const Chronicle & ch1, const Chronicle & ch2,
219  const Chronicle & ch3, const Chronicle & ch4,
220  const Chronicle & ch5);
221 
222  static Chronicle & seq(const Chronicle & ch1, const Chronicle & ch2);
223  static Chronicle & seq(const Chronicle & ch1, const Chronicle & ch2,
224  const Chronicle & ch3);
225  static Chronicle & seq(const Chronicle & ch1, const Chronicle & ch2,
226  const Chronicle & ch3, const Chronicle & ch4);
227  static Chronicle & seq(const Chronicle & ch1, const Chronicle & ch2,
228  const Chronicle & ch3, const Chronicle & ch4,
229  const Chronicle & ch5);
230 
231 
232  static Chronicle & seq(const vector< ChronicleBox > & chronicles);
233  static Chronicle & comb(Chronicle::ChronicleType type, const Chronicle & ch1, const Chronicle & ch2);
234  static Chronicle & comb(Chronicle::ChronicleType type, const Chronicle & ch1, const Chronicle & ch2,
235  const Chronicle & ch3);
236  static Chronicle & comb(Chronicle::ChronicleType type, const Chronicle & ch1, const Chronicle & ch2,
237  const Chronicle & ch3, const Chronicle & ch4);
238  static Chronicle & comb(Chronicle::ChronicleType type, const Chronicle & ch1, const Chronicle & ch2,
239  const Chronicle & ch3, const Chronicle & ch4,
240  const Chronicle & ch5);
241  static Chronicle & comb(Chronicle::ChronicleType type,const vector< ChronicleBox > & chronicles);
242 
243  static void destroy();
244  };
245  };
246 };
247 
248 
249 #endif
TimeNet::ConstIterator postEnd(const Transition &transition) const
Definition: Chronicle.hh:108
ChronicleType type() const
Definition: Chronicle.hh:31
size_t numberOfTransitions() const
Definition: Chronicle.hh:130
static std::string typeName()
Definition: Chronicle.hh:19
Diades::Graph::Node Transition
Definition: BoundedNet.hh:31
Diades::Utils::Exception< Chronicle > Exception
Definition: Chronicle.hh:20
Diades::Graph::Node Place
Definition: BoundedNet.hh:24
TimeNet::TransitionIterator endOfTransitions() const
Definition: Chronicle.hh:63
TimeNet::ConstIterator preBegin(const Transition &transition) const
Definition: Chronicle.hh:77
DdAutFsm::EventPropertyId Event
Definition: TrimState.cc:139
TimeNet::ConstIterator postBegin(const Transition &transition) const
Definition: Chronicle.hh:97
bool isKo(Place p) const
Definition: Chronicle.hh:162
Namespace of the Diades project.
static vector< Chronicle * > _chronicles
Definition: Chronicle.hh:197
TimeNet::PlaceIterator beginOfPlaces() const
Definition: Chronicle.hh:49
Diades::Utils::Box< Chronicle const > ChronicleBox
Definition: Chronicle.hh:22
const Event & getEvent(Transition t) const
Definition: Chronicle.hh:118
TimeNet::TransitionIterator beginOfTransitions() const
Definition: Chronicle.hh:58
Iterators over the places or the transitions of the Net.
Definition: Net.hh:210
TimeNet::ConstIterator preEnd(const Transition &transition) const
Definition: Chronicle.hh:87
virtual void net2Tina(const string &name) const
Definition: Chronicle.hh:187
Definition of the Box Utils.
const set< Place > & init() const
Definition: Chronicle.hh:167
const string & labelOfPlace(Place p) const
Definition: Chronicle.hh:67
bool isInit(Place p) const
Definition: Chronicle.hh:178
TimeNet::PlaceIterator endOfPlaces() const
Definition: Chronicle.hh:54
size_t numberOfPlaces() const
Definition: Chronicle.hh:141
bool isOk(Place p) const
Definition: Chronicle.hh:152
void setInit(Place p)
Definition: Chronicle.hh:172
A Box is a container that contains at most a reference to an object.
Definition: Box.hh:27
ChronicleType _type
Definition: Chronicle.hh:28