DiaDes  0.1
DIAgnosis of Discrete-Event System
Printer.hh
Go to the documentation of this file.
1 
9 #ifndef __DIADES__AUTOMATA__EXPERIMENTAL__PRINTER__HH__
10 #define __DIADES__AUTOMATA__EXPERIMENTAL__PRINTER__HH__
11 
16 
17 namespace Diades
18 {
19  namespace Automata
20  {
21  namespace Experimental
22  {
23 
29  template<typename TypeToPrint>
30  class Printer
31  {
32  public:
36  using Object = TypeToPrint;
37 
45  virtual ostream & print(ostream & os, const TypeToPrint & object) const = 0;
46  };
47 
48 
55  template<typename TypeToPrint>
56  class StreamBasedPrinter : public Printer<TypeToPrint>
57  {
58  public:
66  virtual ostream & print(ostream & os, const TypeToPrint & object) const
67  {
68  return os << object;
69  }
70  };
71 
72 
80  template<typename EventInfo,typename EventId>
82  public Printer<EventId>
83  {
84  private:
89 
90  public:
91 
97  {
98  }
107  virtual ostream & print(ostream & os, const EventId & event) const
108  {
109  os << _mgr.getEvent(event);
110  return os;
111  }
112  };
113 
114 
115 
116 
124  template<typename StateInfo, typename StateInfoId>
126  public Printer<StateInfoId>
127  {
128  protected:
129 
134 
135  public:
136 
142  {
143  }
144 
153  virtual ostream & print(ostream & os,
154  const StateInfoId & id) const
155  {
156  os << _mgr.getStateProperty(id);
157  return os;
158  }
159  };
160 
171  template<typename EventInfo,typename EventId>
173  public Printer<typename EventSetManager<EventInfo,EventId>::EventSet>
174  {
175  private:
180 
185  public:
186 
193  const EventManager<EventInfo,EventId> & mgrEvent) :
194  _eventPrinter(mgrEvent), _mgr(mgrSet)
195  {
196  }
197 
206  virtual ostream & print(ostream & os,
207  const typename EventSetManager<EventInfo,EventId>::EventSet & es) const
208  {
209  os << "{ ";
210  size_t code = es.find_first();
211  while (code < es.npos)
212  {
213  _eventPrinter.print(os, _mgr.event(code));
214  os << " ";
215  code = es.find_next(code);
216  }
217  os << "}";
218  return os;
219  }
220  };
221 
222 
223 
224 
238  template<typename LocalStateInfo, typename LocalStateInfoId, typename EventInfo, typename EventId>
241  LocalCandidate<
242  LocalStateInfoId,
243  typename EventSetManager<EventInfo,EventId>::EventSet >,
244  LocalStateInfoId >
245  {
246  public:
251  using LocCandidate =
255 
256 
257  private:
266 
271  public:
272 
282  StateInfoManagerPrettyPrinter<LocCandidate,LocalStateInfoId>(candManager),
283  _statePrinter(statePrinter),
284  _evSetPrinter(evSetPrinter),
285  _candManager(candManager)
286  {
287  }
288 
297  virtual ostream & print(ostream & os,
298  const LocalStateInfoId & candId) const
299  {
300  auto & candidate = _candManager.getStateProperty(candId);
301  _statePrinter.print(os, candidate.state());
302  os << ",";
303  _evSetPrinter.print(os, candidate.faults());
304  return os;
305  }
306  };
307  }
308  }
309 }
310 
311 
312 
313 #endif
314 
const EventSetManagerPrettyPrinter< EventInfo, EventId > & _evSetPrinter
Definition: Printer.hh:265
virtual ostream & print(ostream &os, const TypeToPrint &object) const =0
virtual ostream & print(ostream &os, const LocalStateInfoId &candId) const
Definition: Printer.hh:297
const StatePropertyManager< LocCandidate, LocalStateInfoId > & _candManager
Definition: Printer.hh:270
const EventSetManager< EventInfo, EventId > & _mgr
Definition: Printer.hh:184
const EventManager< EventInfo, EventId > & _mgr
Definition: Printer.hh:88
StateInfoManagerPrettyPrinter(const StatePropertyManager< StateInfo, StateInfoId > &mgr)
Definition: Printer.hh:141
EventSetManagerPrettyPrinter(const EventSetManager< EventInfo, EventId > &mgrSet, const EventManager< EventInfo, EventId > &mgrEvent)
Definition: Printer.hh:192
EventManagerPrettyPrinter(const EventManager< EventInfo, EventId > &mgr)
Definition: Printer.hh:96
const StatePropertyManager< StateInfo, StateInfoId > & _mgr
Definition: Printer.hh:133
LocalCandidatePrettyPrinter(const StateInfoManagerPrettyPrinter< LocalStateInfo, LocalStateInfoId > &statePrinter, const EventSetManagerPrettyPrinter< EventInfo, EventId > &evSetPrinter, const StatePropertyManager< LocCandidate, LocalStateInfoId > &candManager)
Definition: Printer.hh:279
const Event & getEvent(EventId id) const
Definition: Event.hh:183
Namespace of the Diades project.
virtual ostream & print(ostream &os, const TypeToPrint &object) const
Definition: Printer.hh:66
virtual ostream & print(ostream &os, const typename EventSetManager< EventInfo, EventId >::EventSet &es) const
Definition: Printer.hh:206
EventManagerPrettyPrinter< EventInfo, EventId > _eventPrinter
Definition: Printer.hh:179
virtual ostream & print(ostream &os, const StateInfoId &id) const
Definition: Printer.hh:153
const StateProperty & getStateProperty(StatePropertyId id) const
const StateInfoManagerPrettyPrinter< LocalStateInfo, LocalStateInfoId > & _statePrinter
Definition: Printer.hh:261
virtual ostream & print(ostream &os, const EventId &event) const
Definition: Printer.hh:107