EEROS  1.0.0.0
API for the EEROS Real-Time Robotics Framework
Sum.hpp
Go to the documentation of this file.
1 #ifndef ORG_EEROS_CONTROL_SUM_HPP_
2 #define ORG_EEROS_CONTROL_SUM_HPP_
3 
6 
7 namespace eeros {
8  namespace control {
9 
10  template < uint8_t N = 2, typename T = double >
11  class Sum : public Block1o<T> {
12 
13  public:
14  Sum() {
15  for(uint8_t i = 0; i < N; i++) {
16  negated[i] = false;
17  in[i].setOwner(this);
18  }
19  }
20 
21  virtual void run() {
22  T sum; sum = 0; // TODO works only with primitive types or eeros::math::Matrix -> make specialization and use fill() for compatibility with std::array;
23  for(uint8_t i = 0; i < N; i++) {
24  if(negated[i]) sum -= in[i].getSignal().getValue();
25  else sum += in[i].getSignal().getValue();
26  }
27  this->out.getSignal().setValue(sum);
28  this->out.getSignal().setTimestamp(in[0].getSignal().getTimestamp());
29  }
30 
31  virtual Input<T>& getIn(uint8_t index) {
32  if (index >= N) throw eeros::Fault("index too big in sum block '" + this->getName() + "'");
33  return in[index];
34  }
35 
36  virtual void negateInput(uint8_t index) {
37  if (index >= N) throw eeros::Fault("index too big in sum block '" + this->getName() + "'");
38  negated[index] = true;
39  }
40 
41  protected:
43  bool negated[N];
44  };
45 
46  /********** Print functions **********/
47  template <uint8_t N, typename T>
48  std::ostream& operator<<(std::ostream& os, Sum<N,T>& sum) {
49  os << "Block sum: '" << sum.getName() << "'";
50  }
51 
52  };
53 };
54 
55 #endif /* ORG_EEROS_CONTROL_SUM_HPP_ */
Definition: Sum.hpp:11
Sum()
Definition: Sum.hpp:14
virtual void negateInput(uint8_t index)
Definition: Sum.hpp:36
Definition: Block1o.hpp:12
Definition: Config.hpp:14
Output< T > out
Definition: Block1o.hpp:23
Input< T > in[N]
Definition: Sum.hpp:42
bool negated[N]
Definition: Sum.hpp:43
virtual std::string getName()
Definition: Block.cpp:9
Definition: Fault.hpp:9
Definition: Input.hpp:13
virtual void run()
Definition: Sum.hpp:21
virtual Input< T > & getIn(uint8_t index)
Definition: Sum.hpp:31