dynamic-graph  4.3.1
Dynamic graph library
tracer.h
1 // -*- mode: c++ -*-
2 // Copyright 2010, François Bleibel, Thomas Moulard, Olivier Stasse,
3 // JRL, CNRS/AIST.
4 //
5 
6 #ifndef DYNAMIC_GRAPH_TRACER_H
7 #define DYNAMIC_GRAPH_TRACER_H
8 #include <boost/function.hpp>
9 #include <list>
10 #include <mutex>
11 #include <string>
12 
13 #include <dynamic-graph/entity.h>
14 #include <dynamic-graph/exception-traces.h>
15 #include <dynamic-graph/signal-base.h>
16 #include <dynamic-graph/signal-time-dependent.h>
17 #include <dynamic-graph/time-dependency.h>
18 
19 #include <dynamic-graph/config-tracer.hh>
20 
21 namespace dynamicgraph {
25 class DG_TRACER_DLLAPI Tracer : public Entity {
26  DYNAMIC_GRAPH_ENTITY_DECL();
27 
28 protected:
29  typedef std::list<const SignalBase<int> *> SignalList;
30  SignalList toTraceSignals;
31  std::mutex files_mtx;
32 
33 public:
34  enum TraceStyle {
35  WHEN_SAID
37  ,
38  EACH_TIME
40  ,
41  FREQUENTLY
43  };
44  TraceStyle traceStyle;
45  static const TraceStyle TRACE_STYLE_DEFAULT = EACH_TIME;
46  double frequency;
47 
48  std::string basename;
49  std::string suffix;
50  std::string rootdir;
51  bool namesSet;
52  typedef std::list<std::ostream *> FileList;
53  FileList files;
54  typedef std::list<std::string> NameList;
55  NameList names;
56  bool play;
57  int timeStart;
58 
59 public:
60  Tracer(const std::string n);
61  virtual ~Tracer() { closeFiles(); }
62 
63  void addSignalToTrace(const SignalBase<int> &sig,
64  const std::string &filename = "");
65  void addSignalToTraceByName(const std::string &signame,
66  const std::string &filename = "");
67  void clearSignalToTrace();
68  // void parasite( SignalBase<int>& sig );
69  void openFiles(const std::string &rootdir, const std::string &basename,
70  const std::string &suffix);
71  virtual void closeFiles();
72 
73 protected:
74  virtual void openFile(const SignalBase<int> &sig,
75  const std::string &filename);
76 
77 public:
78  void setTraceStyle(const TraceStyle &style) { traceStyle = style; }
79  TraceStyle getTraceStyle() { return traceStyle; }
80 
81  void setFrenquency(const double &frqu) { frequency = frqu; }
82  double getFrequency() { return frequency; }
83 
84  void record();
85  virtual void recordSignal(std::ostream &os, const SignalBase<int> &sig);
86  int &recordTrigger(int &dummy, const int &time);
87 
88  virtual void trace();
89  void start() { play = true; }
90  void stop() { play = false; }
91 
92 public:
93  // SignalTrigerer<int> triger;
95 
96  /* --- DISPLAY --------------------------------------------------------- */
97  DG_TRACER_DLLAPI friend std::ostream &operator<<(std::ostream &os,
98  const Tracer &t);
99 
100  /* --- PARAMS --- */
101  void display(std::ostream &os) const;
102 };
103 
104 } // end of namespace dynamicgraph
105 
106 #endif
This class represents an entity, i.e. a generic computational unit that provides input and output sig...
Definition: entity.h:53
Tracer plug-in main class.
Definition: tracer.h:25