Lodestar
An integrated real-time control package in C++
UnaryMeanBlock.hpp
1 //
2 // Created by Hamza El-Kebir on 2/19/22.
3 //
4 
5 #ifndef LODESTAR_UNARYMEANBLOCK_HPP
6 #define LODESTAR_UNARYMEANBLOCK_HPP
7 
8 #include <Lodestar/blocks/Block.hpp>
9 #include <Lodestar/aux/TemplateTools.hpp>
10 
11 namespace ls {
12  namespace blocks {
13  namespace std {
14 #define OUTPUT_UNARYMEANBLOCK() \
15  typename ::std::conditional<ls::aux::TemplateTraits::BinaryOperators::parseMatrixLike<TInput>::value, typename ls::aux::TemplateTraits::BinaryOperators::parseMatrixLike<TInput>::scalar, TInput>::type
16 
17  template<typename TInput>
19  : public Block<
20  ::std::tuple<TInput>,
21  ::std::tuple<OUTPUT_UNARYMEANBLOCK()>,
22  BlockProto::empty
23  > {
24  public:
25  using Base =
26  Block<
27  ::std::tuple<TInput>,
28  ::std::tuple<OUTPUT_UNARYMEANBLOCK()>,
29  BlockProto::empty
30  >;
31 
33  static_assert(InputTrait::value, "Input must be matrix-like; otherwise same value would be returned.");
34 
35  using OutputType = OUTPUT_UNARYMEANBLOCK();
36 
38  {
39  bindFunction();
40  }
41 
42 
43  protected:
44  void bindFunction()
45  {
46  this->equation = [](Base &b) -> void {
47  b.template o<0>() = b.template i<0>().object.mean();
48  };
49  }
50  };
51  }
52 
53  template<typename TInput>
54  class BlockTraits<std::UnaryMeanBlock<TInput>> {
55  public:
56  static constexpr const BlockType blockType = BlockType::UnaryMeanBlock;
57  enum {
58  directFeedthrough = true
59  };
60 
62  using Base = typename type::Base;
63 
64  enum {
65  kIns = Base::kIns,
66  kOuts = Base::kOuts,
67  kPars = Base::kPars
68  };
69 
70  static const ::std::array<::std::string, kIns> inTypes;
71  static const ::std::array<::std::string, kOuts> outTypes;
72  static const ::std::array<::std::string, kPars> parTypes;
73 
74  static const ::std::array<::std::string, 1> templateTypes;
75  };
76 
77  template<typename TInput>
78  const ::std::array<::std::string, BlockTraits<std::UnaryMeanBlock<TInput>>::kIns> BlockTraits<std::UnaryMeanBlock<TInput>>::inTypes =
79  {demangle(typeid(TInput).name())};
80 
81  template<typename TInput>
82  const ::std::array<::std::string, BlockTraits<std::UnaryMeanBlock<TInput>>::kOuts> BlockTraits<std::UnaryMeanBlock<TInput>>::outTypes =
83  {demangle(typeid(typename std::UnaryMeanBlock<TInput>::OutputType).name())};
84 
85  template<typename TInput>
86  const ::std::array<::std::string, BlockTraits<std::UnaryMeanBlock<TInput>>::kPars> BlockTraits<std::UnaryMeanBlock<TInput>>::parTypes =
87  {};
88 
89  template<typename TInput>
90  const ::std::array<::std::string, 1> BlockTraits<std::UnaryMeanBlock<TInput>>::templateTypes =
91  {demangle(typeid(TInput).name())};
92  }
93 }
94 
95 #undef OUTPUT_UNARYMEANBLOCK
96 
97 #endif //LODESTAR_UNARYMEANBLOCK_HPP
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::aux::TemplateTraits::BinaryOperators::parseMatrixLike
Extracts data from matrix-like types.
Definition: TemplateTraits.hpp:114
ls
Main Lodestar code.
Definition: BilinearTransformation.hpp:12
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::BlockType::UnaryMeanBlock
@ UnaryMeanBlock
Unary mean value block.
ls::blocks::std::UnaryMeanBlock
Definition: UnaryMeanBlock.hpp:18
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