signal-base.h
Go to the documentation of this file.
1 // -*- mode: c++ -*-
2 // Copyright 2010, Fran├žois Bleibel, Thomas Moulard, Olivier Stasse,
3 // JRL, CNRS/AIST.
4 // LAAS, CNRS
5 //
6 
7 #ifndef DYNAMIC_GRAPH_SIGNAL_BASE_H
8 #define DYNAMIC_GRAPH_SIGNAL_BASE_H
10 
11 #include <boost/noncopyable.hpp>
12 #include <dynamic-graph/fwd.hh>
13 #include <sstream>
14 #include <string>
15 #include <typeinfo>
16 
17 namespace dynamicgraph {
18 
26 template <class Time>
27 class SignalBase : public boost::noncopyable {
28  public:
29  explicit SignalBase(std::string name = "")
30  : name(name), signalTime(0), ready(false) {}
31 
32  virtual ~SignalBase() {}
33 
36  virtual const Time &getTime() const { return signalTime; }
37 
38  virtual void setTime(const Time &t) { signalTime = t; }
39 
40  const bool &getReady() const { return ready; }
41 
42  const std::string &getName() const { return name; }
43 
44  void getClassName(std::string &aClassName) const {
45  aClassName = typeid(this).name();
46  }
47 
48  virtual void setPeriodTime(const Time &) {}
49 
50  virtual Time getPeriodTime() const { return 1; }
51 
53 
56 
57  virtual void addDependency(const SignalBase<Time> &) {}
58 
59  virtual void removeDependency(const SignalBase<Time> &) {}
60 
61  virtual void clearDependencies() {}
62 
63  virtual bool needUpdate(const Time &) const { return ready; }
64 
65  inline void setReady(const bool sready = true) { ready = sready; }
66 
67  virtual std::ostream &writeGraph(std::ostream &os) const { return os; }
68 
69  virtual std::ostream &displayDependencies(std::ostream &os, const int = -1,
70  std::string space = "",
71  std::string next1 = "",
72  std::string = "") const {
73  os << space << next1 << "-- ";
74  display(os);
75  return os;
76  }
77 
79 
82 
83  /* Plug the arg-signal on the <this> object. Plug-in is always
84  * a descending operation (the actual <this> object will call the arg-signal
85  * and not the opposite).
86  */
87  virtual void plug(SignalBase<Time> *sigarg) {
90  "Plug-in operation not possible with this signal. ",
91  "(while trying to plug %s on %s).", sigarg->getName().c_str(),
92  this->getName().c_str());
93  }
94 
95  virtual void unplug() {
98  "Plug-in operation not possible with this signal. ",
99  "(while trying to unplug %s).", this->getName().c_str());
100  }
101 
102  virtual bool isPlugged() const { return false; }
103 
104  virtual SignalBase<Time> *getPluged() const { return NULL; }
105 
106  virtual void setConstantDefault() {
109  "Plug-in operation not possible with this signal. ",
110  "(while trying to save %s).", this->getName().c_str());
111  }
112 
114 
117 
118  /* Generic set function. Should be reimplemented by the specific
119  * Signal. Sets a signal value
120  */
121  virtual void set(std::istringstream &) {
123  "Set operation not possible with this signal. ",
124  "(while trying to set %s).",
125  this->getName().c_str());
126  }
127 
128  virtual void get(std::ostream &) const {
130  "Get operation not possible with this signal. ",
131  "(while trying to get %s).",
132  this->getName().c_str());
133  }
134 
135  virtual inline void recompute(const Time &) {
138  "Recompute operation not possible with this signal. ",
139  "(while trying to recompute %s).", this->getName().c_str());
140  }
141 
142  virtual void trace(std::ostream &) const {
144  "Trace operation not possible with this signal. ",
145  "(while trying to trace %s).",
146  this->getName().c_str());
147  }
148 
150 
153 
154  virtual std::ostream &display(std::ostream &os) const {
155  os << "Sig:" << name;
156  return os;
157  }
158 
159  std::string shortName() const {
160  std::istringstream iss(name);
161  const int SIZE = 128;
162  char buffer[SIZE];
163  while (iss.good()) {
164  iss.getline(buffer, SIZE, ':');
165  }
166  const std::string res(buffer);
167  return res;
168  }
170 
173 
174  virtual void ExtractNodeAndLocalNames(std::string &LocalName,
175  std::string &NodeName) const {
176  std::string fullname = this->getName();
177 
178  size_t IdxPosLocalName = fullname.rfind(":");
179  LocalName = fullname.substr(IdxPosLocalName + 1,
180  fullname.length() - IdxPosLocalName + 1);
181  size_t IdxPosNodeNameStart = fullname.find("(");
182  size_t IdxPosNodeNameEnd = fullname.find(")");
183  NodeName = fullname.substr(IdxPosNodeNameStart + 1,
184  IdxPosNodeNameEnd - IdxPosNodeNameStart - 1);
185  }
186 
188 
191  virtual void checkCompatibility() {
193  "Abstract signal not compatible with anything.",
194  "(while trying to plug <%s>).",
195  this->getName().c_str());
196  }
198 
199  protected:
200  std::string name;
202  bool ready;
203 };
204 
206 template <class Time>
207 std::ostream &operator<<(std::ostream &os, const SignalBase<Time> &sig) {
208  return sig.display(os);
209 }
210 } // end of namespace dynamicgraph.
211 
212 #endif
virtual void trace(std::ostream &) const
Definition: signal-base.h:142
virtual void ExtractNodeAndLocalNames(std::string &LocalName, std::string &NodeName) const
Definition: signal-base.h:174
virtual Time getPeriodTime() const
Definition: signal-base.h:50
virtual void setConstantDefault()
Definition: signal-base.h:106
void getClassName(std::string &aClassName) const
Definition: signal-base.h:44
virtual void recompute(const Time &)
Definition: signal-base.h:135
virtual void setPeriodTime(const Time &)
Definition: signal-base.h:48
dynamicgraph::SignalArray_const< double > sig
Definition: signal-all.cpp:25
SignalBase(std::string name="")
Definition: signal-base.h:29
Exceptions raised when an error related to signals happen.
const std::string & getName() const
Definition: signal-base.h:42
virtual void checkCompatibility()
Definition: signal-base.h:191
virtual std::ostream & display(std::ostream &os) const
Definition: signal-base.h:154
The base class for signals: not to be used as such.
Definition: fwd.hh:51
std::string shortName() const
Definition: signal-base.h:159
virtual SignalBase< Time > * getPluged() const
Definition: signal-base.h:104
virtual bool isPlugged() const
Definition: signal-base.h:102
virtual void addDependency(const SignalBase< Time > &)
Definition: signal-base.h:57
virtual void plug(SignalBase< Time > *sigarg)
Definition: signal-base.h:87
virtual void unplug()
Definition: signal-base.h:95
virtual bool needUpdate(const Time &) const
Definition: signal-base.h:63
virtual void clearDependencies()
Definition: signal-base.h:61
#define DG_THROW
virtual std::ostream & writeGraph(std::ostream &os) const
Definition: signal-base.h:67
void setReady(const bool sready=true)
Definition: signal-base.h:65
virtual const Time & getTime() const
Definition: signal-base.h:36
virtual void removeDependency(const SignalBase< Time > &)
Definition: signal-base.h:59
virtual void setTime(const Time &t)
Definition: signal-base.h:38
virtual std::ostream & displayDependencies(std::ostream &os, const int=-1, std::string space="", std::string next1="", std::string="") const
Definition: signal-base.h:69
const bool & getReady() const
Definition: signal-base.h:40


dynamic-graph
Author(s): Nicolas Mansard, Olivier Stasse
autogenerated on Sun Jun 25 2023 02:06:03