Lodestar
An integrated real-time control package in C++
UnaryAbsBlock.hpp
1 //
2 // Created by Hamza El-Kebir on 2/19/22.
3 //
4 
5 #ifndef LODESTAR_UNARYABSBLOCK_HPP
6 #define LODESTAR_UNARYABSBLOCK_HPP
7 
8 
9 #include <Lodestar/blocks/Block.hpp>
10 #include <Lodestar/aux/TemplateTools.hpp>
11 
12 namespace ls {
13  namespace blocks {
14  namespace std {
15  template<typename TInput>
17  : public Block<
18  ::std::tuple<TInput>,
19  ::std::tuple<TInput>,
20  BlockProto::empty
21  > {
22  public:
23  using Base =
24  Block<
25  ::std::tuple<TInput>,
26  ::std::tuple<TInput>,
27  BlockProto::empty
28  >;
29 
31 
33  {
34  bindFunction();
35  }
36 
37 
38  protected:
39  template<typename TTInput = TInput, typename ::std::enable_if<ls::aux::TemplateTraits::BinaryOperators::parseMatrixLike<TTInput>::value>::type * = nullptr>
40  void bindFunction()
41  {
42  this->equation = [](Base &b) -> void {
43  b.template o<0>().object = b.template i<0>().object;
44  b.template o<0>().object = b.template o<0>().object.unaryExpr([] (typename InputTrait::scalar s) -> typename InputTrait::scalar {
45  return abs(s);
46  });
47  b.template o<0>().propagate();
48  };
49  }
50 
51  template<typename TTInput = TInput, typename ::std::enable_if<::std::is_same<TTInput, typename ls::aux::TemplateTraits::BinaryOperators::parseMatrixLike<TTInput>::scalar>::value>::type * = nullptr>
52  void bindFunction()
53  {
54  this->equation = [](Base &b) -> void {
55  b.template o<0>() = (b.template i<0>().object < 0) ? (-b.template i<0>().object) : b.template i<0>().object;
56  };
57  }
58  };
59  }
60 
61  template<typename TInput>
62  class BlockTraits<std::UnaryAbsBlock<TInput>> {
63  public:
64  static constexpr const BlockType blockType = BlockType::UnaryAbsBlock;
65  enum {
66  directFeedthrough = true
67  };
68 
70  using Base = typename type::Base;
71 
72  enum {
73  kIns = Base::kIns,
74  kOuts = Base::kOuts,
75  kPars = Base::kPars
76  };
77 
78  static const ::std::array<::std::string, kIns> inTypes;
79  static const ::std::array<::std::string, kOuts> outTypes;
80  static const ::std::array<::std::string, kPars> parTypes;
81 
82  static const ::std::array<::std::string, 1> templateTypes;
83  };
84 
85  template<typename TInput>
86  const ::std::array<::std::string, BlockTraits<std::UnaryAbsBlock<TInput>>::kIns> BlockTraits<std::UnaryAbsBlock<TInput>>::inTypes =
87  {demangle(typeid(TInput).name())};
88 
89  template<typename TInput>
90  const ::std::array<::std::string, BlockTraits<std::UnaryAbsBlock<TInput>>::kOuts> BlockTraits<std::UnaryAbsBlock<TInput>>::outTypes =
91  {demangle(typeid(TInput).name())};
92 
93  template<typename TInput>
94  const ::std::array<::std::string, BlockTraits<std::UnaryAbsBlock<TInput>>::kPars> BlockTraits<std::UnaryAbsBlock<TInput>>::parTypes =
95  {};
96 
97  template<typename TInput>
98  const ::std::array<::std::string, 1> BlockTraits<std::UnaryAbsBlock<TInput>>::templateTypes =
99  {demangle(typeid(TInput).name())};
100  }
101 }
102 
103 
104 #endif //LODESTAR_UNARYABSBLOCK_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::std::UnaryAbsBlock
Definition: UnaryAbsBlock.hpp:16
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::UnaryAbsBlock
@ UnaryAbsBlock
Unary absolute value block.
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