Lodestar
An integrated real-time control package in C++
ConverterBlock.hpp
1 //
2 // Created by Hamza El-Kebir on 12/23/21.
3 //
4 
5 #ifndef LODESTAR_CONVERTERBLOCK_HPP
6 #define LODESTAR_CONVERTERBLOCK_HPP
7 
8 #include "Lodestar/blocks/Block.hpp"
9 
10 namespace ls {
11  namespace blocks {
12  namespace std {
13  template<typename TInput, typename TOutput>
15  public Block<
16  ::std::tuple<TInput>,
17  ::std::tuple<TOutput>,
18  BlockProto::empty
19  > {
20  static_assert(::std::is_convertible<TInput, TOutput>::value,
21  "Input and output types must be convertible.");
22 
23  public:
24  using Base =
25  Block<
26  ::std::tuple<TInput>,
27  ::std::tuple<TOutput>,
28  BlockProto::empty
29  >;
30 
32  {
33  bindEquation();
34  }
35 
36  protected:
37  void bindEquation()
38  {
39  this->equation = ::std::bind(
41  this,
42  ::std::placeholders::_1
43  );
44  }
45 
46  void triggerFunction(Base &b)
47  {
48  b.template o<0>() = b.template i<0>();
49  }
50 
51  };
52  }
53 
54  template<typename TInput, typename TOutput>
55  class BlockTraits<std::ConverterBlock<TInput, TOutput>> {
56  public:
57  static constexpr const BlockType blockType = BlockType::ConverterBlock;
58  enum {
59  directFeedthrough = true
60  };
61 
63  using Base = typename type::Base;
64 
65  enum {
66  kIns = Base::kIns,
67  kOuts = Base::kOuts,
68  kPars = Base::kPars
69  };
70 
71  static const ::std::array<::std::string, kIns> inTypes;
72  static const ::std::array<::std::string, kOuts> outTypes;
73  static const ::std::array<::std::string, kPars> parTypes;
74 
75  static const ::std::array<::std::string, 2> templateTypes;
76  };
77 
78  template<typename TInput, typename TOutput>
79  const ::std::array<::std::string, BlockTraits<std::ConverterBlock<TInput, TOutput>>::kIns> BlockTraits<std::ConverterBlock<TInput, TOutput>>::inTypes =
80  {demangle(typeid(TInput).name())};
81 
82  template<typename TInput, typename TOutput>
83  const ::std::array<::std::string, BlockTraits<std::ConverterBlock<TInput, TOutput>>::kOuts> BlockTraits<std::ConverterBlock<TInput, TOutput>>::outTypes =
84  {demangle(typeid(TOutput).name())};
85 
86  template<typename TInput, typename TOutput>
87  const ::std::array<::std::string, BlockTraits<std::ConverterBlock<TInput, TOutput>>::kPars> BlockTraits<std::ConverterBlock<TInput, TOutput>>::parTypes =
88  {};
89 
90  template<typename TInput, typename TOutput>
91  const ::std::array<::std::string, 2> BlockTraits<std::ConverterBlock<TInput, TOutput>>::templateTypes =
92  {demangle(typeid(TInput).name()), demangle(typeid(TOutput).name())};
93  }
94 }
95 
96 
97 #endif //LODESTAR_CONVERTERBLOCK_HPP
ls::blocks::std::ConverterBlock
Definition: ConverterBlock.hpp:14
ls::blocks::BlockTraits::directFeedthrough
static constexpr const bool directFeedthrough
Whether or not the block has direct feedthrough.
Definition: BlockTraits.hpp:44
ls::blocks::BlockTraits
A traits object that exposes information about TBlock.
Definition: BlockTraits.hpp:37
ls::blocks::BlockTraits::inTypes
static const ::std::array<::std::string, kIns > inTypes
Input types (as strings).
Definition: BlockTraits.hpp:59
ls::blocks::BlockType
BlockType
Block type information.
Definition: BlockType.hpp:25
ls
Main Lodestar code.
Definition: BilinearTransformation.hpp:12
ls::blocks::BlockType::ConverterBlock
@ ConverterBlock
Converter block.
ls::blocks::BlockTraits::outTypes
static const ::std::array<::std::string, kOuts > outTypes
Output types (as strings).
Definition: BlockTraits.hpp:61
ls::blocks::BlockTraits::blockType
static constexpr const BlockType blockType
Block type.
Definition: BlockTraits.hpp:42
ls::blocks::BlockTraits::templateTypes
static const ::std::array<::std::string, 1 > templateTypes
Template parameter types (as strings).
Definition: BlockTraits.hpp:66
ls::blocks::Block
Generic base template class for all tuple-based Block instances.
Definition: Block.hpp:45
ls::blocks::BlockTraits::kIns
static const constexpr int kIns
Number of input slots.
Definition: BlockTraits.hpp:52
ls::blocks::BlockTraits::parTypes
static const ::std::array<::std::string, kPars > parTypes
Parameter types (as strings).
Definition: BlockTraits.hpp:63
ls::blocks::BlockTraits::kPars
static const constexpr int kPars
Number of parameters.
Definition: BlockTraits.hpp:56
ls::blocks::BlockTraits::kOuts
static const constexpr int kOuts
Number of output slots.
Definition: BlockTraits.hpp:54