DiaDes  0.1
DIAgnosisofDiscrete-EventSystem
EncodedInstance.hh
Go to the documentation of this file.
1 #ifndef __DIADES__ALTARICA_ENCODEDINSTANCE__HH
2 #define __DIADES__ALTARICA_ENCODEDINSTANCE__HH
3 
4 #include<diades/graph/Graph.hh>
8 
9 namespace Diades
10 {
11  namespace Altarica
12  {
13 
20  {
21  public:
27  typedef list<Formula>::const_iterator AssertionIterator;
28 
29  private:
31  list<Formula> _invariant;
35  list<EncodedTransition *> _transitions;
37  Fsm _fsm;
38  State _initial;
39  StateFormulaMap _configurationFormula;
40  StateFormulaMap _stateFormula;
41  TransEventMap _tranEvents;
42  string _logs;
43  State _hole;
44 
45  public:
46  EncodedInstanceData(Node instance):_node(instance),
47  _invariant(),
48  _invariantComputed(false),
49  _initialisation(),
50  _initialisationComputed(false),
51  _transitions(),
52  _transitionsComputed(false),
53  _fsm(),
54  _initial(),
55  _configurationFormula(),
56  _stateFormula(),
57  _tranEvents(),
58  _logs(),
59  _hole()
60  {
61  _fsm.init();
62  _configurationFormula.init(_fsm);
63  _stateFormula.init(_fsm);
64  _tranEvents.init(_fsm);
65  }
66 
69  {
70  _fsm.destroy();
71  }
72 
76  const string & logs() const
77  {
78  return _logs;
79  }
80 
84  Node nodeInstance() const { return _node; }
85 
89  State initialState();
90 
95  Formula getStateFormula(State state) const
96  {
97  if(!state.valid() || !(state.owner()==_fsm))
98  {
99  return Formula();
100  }
101  return _stateFormula[state];
102  }
103 
108  Formula getConfigurationFormula(State state) const
109  {
110  if(!state.valid() || !(state.owner()==_fsm))
111  {
112  return Formula();
113  }
114  return _configurationFormula[state];
115  }
116 
117 
122  Formula getFormula(State state) const
123  {
124  if(!state.valid() || !(state.owner()==_fsm))
125  {
126  return Formula();
127  }
128  return getStateFormula(state) && getConfigurationFormula(state);
129  }
130 
131 
132 
133 
138  State getState(Formula formula) const;
139 
142 
146  StateIterator stateBegin() const
147  {
148  return _fsm.nodeBegin();
149  }
150 
154  StateIterator stateEnd() const
155  {
156  return _fsm.nodeEnd();
157  }
158 
159 
163  TransIterator transBegin() const
164  {
165  return _fsm.edgeBegin();
166  }
167 
171  TransIterator transEnd() const
172  {
173  return _fsm.edgeEnd();
174  }
175 
176 
183  void getNextStates(State state,const Event & event, set<State> & successors);
184 
188  AssertionIterator assertionBegin() const
189  {
190  return _invariant.begin();
191  }
195  AssertionIterator assertionEnd() const
196  {
197  return _invariant.end();
198  }
203  const Event & getEvent(Trans t) const
204  {
205  return _tranEvents[t];
206  }
207  };
208 
209 
216  {
217  public:
225 
226  private:
228  public:
229 
230  EncodedInstance():_data(0){}
231  EncodedInstance(EncodedInstanceData * data):_data(data){}
232  EncodedInstance(const EncodedInstance & instance):_data(instance._data){}
233 
235  {
236  if(this != &instance)
237  {
238  _data = instance._data;
239  }
240  return *this;
241  }
242 
247  Formula getFormula(State state) const
248  {
249  if(!valid())
250  {
251  return Formula();
252  }
253  return _data->getFormula(state);
254  }
259  Formula getStateFormula(State state) const
260  {
261  if(!valid())
262  {
263  return Formula();
264  }
265  return _data->getStateFormula(state);
266  }
267 
268 
269 
270 
275  Formula getConfigurationFormula(State state) const
276  {
277  if(!valid())
278  {
279  return Formula();
280  }
281  return _data->getConfigurationFormula(state);
282  }
283 
284 
285 
286 
290  Node nodeInstance() const {
291  if(!valid())
292  {
293  return Node();
294  }
295  return _data->nodeInstance();
296  }
297 
301  bool valid() const
302  {
303  return _data!=0;
304  }
305 
310  bool operator==(const EncodedInstance & instance)
311  {
312  return _data==instance._data;
313  }
314 
315 
320  bool operator!=(const EncodedInstance & instance)
321  {
322  return !((*this)==instance);
323  }
324 
329  bool operator<(const EncodedInstance & instance)
330  {
331  return _data<instance._data;
332  }
333 
337  State initialState()
338  {
339  if(!valid())
340  {
341  return State();
342  }
343  return _data->initialState();
344  }
345 
346 
350  const string & logs() const
351  {
352  return _data->logs();
353  }
354 
355 
360  State getState(Formula formula) const
361  {
362  if(!valid())
363  {
364  return State();
365  }
366  return _data->getState(formula);
367  }
368 
369 
370 
371 
375  StateIterator stateBegin() const
376  {
377  return _data->stateBegin();
378  }
379 
383  StateIterator stateEnd() const
384  {
385  return _data->stateEnd();
386  }
387 
391  TransIterator transBegin() const
392  {
393  return _data->transBegin();
394  }
395 
399  TransIterator transEnd() const
400  {
401  return _data->transEnd();
402  }
403 
410  void getNextStates(State state,const Event & event, set<State> & successors)
411  {
412  _data->getNextStates(state,event,successors);
413  }
414 
415 
420  const Event & getEvent(Trans t) const
421  {
422  return _data->getEvent(t);
423  }
424 
425 
429  AssertionIterator assertionBegin() const
430  {
431  return _data->assertionBegin();
432  }
436  AssertionIterator assertionEnd() const
437  {
438  return _data->assertionEnd();
439  }
440 
441 
442  };
443 
444 
445 
446 
448  void unfold(EncodedInstance instance);
449  void export2dot(EncodedInstance instance, const string & fileName);
450  };
451 };
452 #endif
EncodedInstance()
the Node associated to the EncodedInstance
Formula getConfigurationFormula(State state) const
Diades::Graph::EdgeIterator TransIterator
bool operator<(const EncodedInstance &instance)
bool operator==(const EncodedInstance &instance)
State getState(Formula formula) const
Formula getStateFormula(State state) const
bool valid() const
Definition: NodeImpl.hh:23
void init(Graph &g, SizeType capacity=0, ValueType dflt=ValueType())
Definition: NodeMap.hh:315
EncodedInstanceData::AssertionIterator AssertionIterator
NodeIterator nodeEnd()
Definition: GraphInt.hh:538
Formula getConfigurationFormula(State state) const
void unfold(EncodedInstance instance)
EncodedInstance(EncodedInstanceData *data)
const Graph & owner() const
Definition: NodeImpl.hh:46
Diades::Graph::NodeIterator StateIterator
EdgeIterator edgeEnd()
Definition: GraphInt.hh:574
void getNextStates(State state, const Event &event, set< State > &successors)
EdgeIterator edgeBegin()
Definition: GraphInt.hh:565
Formula getFormula(State state) const
const Event & getEvent(Trans t) const
Diades::Graph::NodeMap< Formula > StateFormulaMap
Diades::Graph::NodeIterator StateIterator
Diades::Graph::NodeMap< Formula > StateFormulaMap
list< EncodedTransition * > _transitions
AssertionIterator assertionBegin() const
Sdmdl::Formula Formula
Diades::Graph::EdgeIterator TransIterator
EncodedInstance & operator=(const EncodedInstance &instance)
const Event & getEvent(Trans t) const
void init(Graph &g, SizeType capacity=0, ValueType dflt=ValueType())
Definition: EdgeMap.hh:314
EncodedInstance(const EncodedInstance &instance)
Namespace of the Diades project.
AssertionIterator assertionBegin() const
void export2dot(EncodedInstance instance, const string &fileName)
State getState(Formula formula) const
list< Formula >::const_iterator AssertionIterator
EncodedInstance createEncodedNode(Node instance)
Formula getStateFormula(State state) const
NodeIterator nodeBegin()
Definition: GraphInt.hh:529
void getNextStates(State state, const Event &event, set< State > &successors)
bool operator!=(const EncodedInstance &instance)
Formula getFormula(State state) const
AssertionIterator assertionEnd() const
AssertionIterator assertionEnd() const
Diades::Graph::EdgeMap< Event > TransEventMap