DiaDes  0.1
DIAgnosis of Discrete-Event System
DdAutFile.hh
Go to the documentation of this file.
1 
9 #ifndef __DIADES__AUTOMATA__EXPERIMENTAL__DDAUTFILE__HH
10 #define __DIADES__AUTOMATA__EXPERIMENTAL__DDAUTFILE__HH
11 
14 #include "AutFile.hh"
15 #include "StatePropertyManager.hh"
16 #include "Event.hh"
17 #include "Printer.hh"
18 #include "FiniteAutomaton.hh"
19 #include "SynchronisationEvent.hh"
20 
21 namespace Diades
22 {
23  namespace Automata
24  {
25 
26  namespace Experimental
27  {
28 
33 
37  using DdAutEventId = size_t;
38 
43 
48 
49 
54 
58  using DdAutEventLabel = std::string;
59 
64 
69 
77  {
82  DdAutStateManager & stateManager,
83  DdAutEventManager & eventManager):fsm(ddAutFsm),
84  sMgr(stateManager),
85  eMgr(eventManager){}
86  ManagedDdAutFsm(ManagedDdAutFsm && mFsm):fsm(mFsm.fsm),sMgr(mFsm.sMgr),eMgr(mFsm.eMgr){}
87  };
88 
96  {
97  const DdAutFsm & fsm;
100  ConstManagedDdAutFsm(const DdAutFsm & ddAutFsm,
101  const DdAutStateManager & stateManager,
102  const DdAutEventManager & eventManager):fsm(ddAutFsm),
103  sMgr(stateManager),
104  eMgr(eventManager){}
105  ConstManagedDdAutFsm(ConstManagedDdAutFsm && mFsm):fsm(mFsm.fsm),sMgr(mFsm.sMgr),eMgr(mFsm.eMgr){}
106  };
107 
108 
116  {
121  DdAutStateManager & stateManager,
122  DdAutEventManager & eventManager):fa(ddAutFa),
123  sMgr(stateManager),
124  eMgr(eventManager){}
125  ManagedDdAutFA(ManagedDdAutFA && mFa):fa(mFa.fa),sMgr(mFa.sMgr),eMgr(mFa.eMgr){}
126  };
127 
128 
136  {
137  const DdAutFA & fa;
140  ConstManagedDdAutFA(const DdAutFA & ddAutFA,
141  const DdAutStateManager & stateManager,
142  const DdAutEventManager & eventManager):fa(ddAutFA),
143  sMgr(stateManager),
144  eMgr(eventManager){}
145  ConstManagedDdAutFA(ConstManagedDdAutFA && mFa):fa(mFa.fa),sMgr(mFa.sMgr),eMgr(mFa.eMgr){}
146  };
147 
152 
157 
158 
164 
170 
171 
176  using DdAutBraces = Diades::Utils::StringDelimiter<char, '{', '}', std::char_traits<char>, std::allocator<char>>;
177 
183 
184 
190 
196 
202 
203 
209 
210 
263  bool fsmFromDdAutFile(std::istream& stream,
264  const ManagedDdAutFsm &mFsm);
265 
266 
267 
320  bool faFromDdAutFile(std::istream& stream,
321  const ManagedDdAutFA & mFa);
322 
335  bool fsmToDdAutFile(ostream& stream,
336  const ConstManagedDdAutFsm & mFsm);
337 
338 
339 
352  bool faToDdAutFile(ostream& stream, const ConstManagedDdAutFA & mFa);
353 
354 
369  bool
370  fsmToAutFile(ostream& stream, const DdAutFsm & fsm,
371  const DdAutEventManager & eManager,
372  bool enforce = false);
373 
374 
375 
376 
377 
385  template<typename DdAutFsmType>
387  public SynchronisationEventEncoder<SynchronisationEvent<DdAutFsmType>>
388  {
389 
390 
391  public:
393 
394  private:
396 
397 
398  public:
399 
405  DefaultDdAutSynchronisationEventEncoder(size_t numberOfSynchronisationEventsToEncode) :
406  SEE(numberOfSynchronisationEventsToEncode), _newEvent(0)
407  {
408  }
409 
415  virtual typename SEE::Event newEvent(const typename SEE::SyncEvent & synchronisedEvent)
416  {
417  return _newEvent++;
418  }
419  };
420 
421 
422 
430  template<typename DdAutFsmType>
431  bool
433  const std::vector<DdAutEventManager> & eventManagers,
434  DdAutEventManager & syncEventManager)
435  {
436  bool result = true;
437  for(auto it = synchro.beginOfSynchronisedEvents();
438  it != synchro.endOfSynchronisedEvents();
439  ++it)
440  {
441  const auto & syncEvent = *it;
442  size_t index = 0;
443  std::vector<string> events;
444  auto compIt = syncEvent.beginOfComponents();
445  while(compIt != syncEvent.endOfComponents())
446  {
447  auto evt = compIt.getAssociatedEvent();
448  if(evt != compIt->nullEvent())
449  {
450  events.push_back(compIt->name() + "." + eventManagers[index].getEvent(evt));
451  }
452  ++compIt;
453  ++index;
454  }
455  result &= syncEventManager.setEvent(DdAutSynchronisation()(events.begin(), events.end()),
456  syncEvent.synchronisedEvent());
457  }
458  return result;
459  }
460 
461 
462 
473  void
474  insertDdAutFA(const DdAutFA & sourceFsm,
475  const DdAutStateManager & sourceStateManager,
476  const DdAutEventManager & sourceEventManager,
477  DdAutFA & targetFsm,
478  DdAutStateManager & targetStateManager,
479  DdAutEventManager & targetEventManager);
480 
491  template<typename DdAutFARange, typename RangeDdAutSM, typename RangeDdAutEM>
492  bool
493  insertFiniteAutomata(DdAutFARange faRange,
494  RangeDdAutSM smRange,
495  RangeDdAutEM evRange,
496  DdAutFA & result,
497  DdAutStateManager & targetStateManager,
498  DdAutEventManager & targetEventManager)
499  {
500  auto faIt = faRange.first;
501  auto smIt = smRange.first;
502  auto evIt = evRange.first;
503  while(faIt != faRange.second)
504  {
505  if(smIt == smRange.second || evIt == evRange.second)
506  {
507  return false;
508  }
509  insertDdAutFA(*faIt, *smIt, *evIt, result, targetStateManager, targetEventManager);
510  ++faIt;
511  ++smIt;
512  ++evIt;
513  ;
514  }
515  return true;
516  }
517  }
518  }
519 }
520 
521 
522 #endif /* __DIADES__AUTOMATA__EXPERIMENTAL__DDAUTFILE_HH */
523 
ConstManagedDdAutFA(const DdAutFA &ddAutFA, const DdAutStateManager &stateManager, const DdAutEventManager &eventManager)
Definition: DdAutFile.hh:140
bool insertFiniteAutomata(DdAutFARange faRange, RangeDdAutSM smRange, RangeDdAutEM evRange, DdAutFA &result, DdAutStateManager &targetStateManager, DdAutEventManager &targetEventManager)
Definition: DdAutFile.hh:493
ConstSynchronisationIterator endOfSynchronisedEvents() const
ManagedDdAutFsm(DdAutFsm &ddAutFsm, DdAutStateManager &stateManager, DdAutEventManager &eventManager)
Definition: DdAutFile.hh:81
bool fsmToAutFile(ostream &stream, const DdAutFsm &fsm, const DdAutEventManager &eManager, bool enforce=false)
ConstManagedDdAutFsm(const DdAutFsm &ddAutFsm, const DdAutStateManager &stateManager, const DdAutEventManager &eventManager)
Definition: DdAutFile.hh:100
ManagedDdAutFA(DdAutFA &ddAutFa, DdAutStateManager &stateManager, DdAutEventManager &eventManager)
Definition: DdAutFile.hh:120
data structure that gathers an FA, a StateManager and a EventManager
Definition: DdAutFile.hh:115
bool faFromDdAutFile(std::istream &stream, const ManagedDdAutFA &mFa)
data structure that gathers an Fsm, a StateManager and a EventManager
Definition: DdAutFile.hh:95
bool setEvent(const Event &event, EventId id)
Definition: Event.hh:156
bool generateSynchronisedDdAutEventLabels(const SynchronisationRules< DdAutFsmType > &synchro, const std::vector< DdAutEventManager > &eventManagers, DdAutEventManager &syncEventManager)
Definition: DdAutFile.hh:432
data structure that gathers an FA, a StateManager and a EventManager
Definition: DdAutFile.hh:135
bool faToDdAutFile(ostream &stream, const ConstManagedDdAutFA &mFa)
StatePropertyIdAsSizeT AutStateId
Definition: AutFile.hh:34
DdAutFsm::EventPropertyId Event
Definition: TrimState.cc:139
String utilities for Diades.
virtual SEE::Event newEvent(const typename SEE::SyncEvent &synchronisedEvent)
Definition: DdAutFile.hh:415
void insertDdAutFA(const DdAutFA &sourceFsm, const DdAutStateManager &sourceStateManager, const DdAutEventManager &sourceEventManager, DdAutFA &targetFsm, DdAutStateManager &targetStateManager, DdAutEventManager &targetEventManager)
Namespace of the Diades project.
bool fsmToDdAutFile(ostream &stream, const ConstManagedDdAutFsm &mFsm)
data structure that gathers an Fsm, a StateManager and a EventManager
Definition: DdAutFile.hh:76
ConstSynchronisationIterator beginOfSynchronisedEvents() const
StatePropertyAsStringLabel DdAutStateLabel
Definition: DdAutFile.hh:53
ConstManagedDdAutFsm(ConstManagedDdAutFsm &&mFsm)
Definition: DdAutFile.hh:105
DefaultDdAutSynchronisationEventEncoder(size_t numberOfSynchronisationEventsToEncode)
Definition: DdAutFile.hh:405
Diades::Utils::Conjunction< DdAutEventLabel, DdAutAmpersand, Diades::Utils::NoDelimiter< char, std::char_traits< char >, std::allocator< char > >> DdAutSynchronisation
Definition: DdAutFile.hh:208
bool fsmFromDdAutFile(std::istream &stream, const ManagedDdAutFsm &mFsm)