Lodestar
An integrated real-time control package in C++
BlockProto.hpp
1 //
2 // Created by Hamza El-Kebir on 12/22/21.
3 //
4 
5 #ifndef LODESTAR_BLOCKPROTO_HPP
6 #define LODESTAR_BLOCKPROTO_HPP
7 
8 #include "SignalBase.hpp"
9 #include <vector>
10 #include <tuple>
11 #ifdef LS_USE_GINAC
12 #include <ginac/ginac.h>
13 #endif
14 
15 namespace ls {
16  namespace blocks {
20  class BlockProto {
21  public:
22  using empty = std::tuple<>;
23 
24  std::vector<SignalBase *>
27 
28  const unsigned int id;
29  unsigned int
30  ins,
31  outs,
32  pars;
33 
41  virtual void trigger()
42  {}
43 
49  void setPriority(int prio)
50  {
51  prio_ = prio;
52  }
53 
59  int getPriority() const
60  {
61  return prio_;
62  }
63 
64  static int objects_created;
65  static int objects_alive;
66 
67  BlockProto() : id(++objects_created)
68  {
69  ++objects_alive;
70  }
71 
72 #ifdef LS_USE_GINAC
73  unsigned serial;
74 
75  const GiNaC::function blkf(const ::std::vector<GiNaC::ex> &exvec, bool appendId = true)
76  {
77  if (appendId) {
78  ::std::vector<GiNaC::ex> exvec2{exvec};
79  exvec2.push_back(GiNaC::numeric{id});
80 
81  return GiNaC::function(serial, exvec2);
82  }
83 
84  return GiNaC::function(serial, exvec);
85  }
86 #endif
87 
88  protected:
89  int prio_ = -1;
90 
91  virtual ~BlockProto()
92  {
93  --objects_alive;
94  }
95  };
96  }
97 }
98 
99 
100 #endif //LODESTAR_BLOCKPROTO_HPP
ls::blocks::BlockProto::inputPointers
std::vector< SignalBase * > inputPointers
Utility using declaration for empty slot bank.
Definition: BlockProto.hpp:25
ls::blocks::BlockProto::outs
unsigned int outs
Number of input slots.
Definition: BlockProto.hpp:31
ls::blocks::BlockProto::trigger
virtual void trigger()
Number of parameter slots.
Definition: BlockProto.hpp:41
ls::blocks::BlockProto::getPriority
int getPriority() const
Definition: BlockProto.hpp:59
ls
Main Lodestar code.
Definition: BilinearTransformation.hpp:12
ls::blocks::BlockProto::outputPointers
std::vector< SignalBase * > outputPointers
Vector of input signal pointers.
Definition: BlockProto.hpp:26
ls::blocks::BlockProto::id
const unsigned int id
Vector of output signal pointers.
Definition: BlockProto.hpp:28
ls::blocks::BlockProto::ins
unsigned int ins
Unique Block ID.
Definition: BlockProto.hpp:30
ls::blocks::BlockProto::setPriority
void setPriority(int prio)
Definition: BlockProto.hpp:49
ls::blocks::BlockProto
Definition: BlockProto.hpp:20
ls::blocks::BlockProto::pars
unsigned int pars
Number of output slots.
Definition: BlockProto.hpp:32