5 #ifndef LODESTAR_MINMAXBLOCK_HPP
6 #define LODESTAR_MINMAXBLOCK_HPP
8 #include <Lodestar/blocks/Block.hpp>
9 #include <Lodestar/aux/TemplateTools.hpp>
25 #define OUTPUT_MINMAXBLOCK() \
26 typename ::std::conditional<ls::aux::TemplateTraits::BinaryOperators::parseMatrixLike<TInput>::value, typename ls::aux::TemplateTraits::BinaryOperators::parseMatrixLike<TInput>::scalar, TInput>::type
28 template<
typename TInput, MinMaxBlockOperator TOps>
32 ::std::tuple<OUTPUT_MINMAXBLOCK()>,
39 ::std::tuple<OUTPUT_MINMAXBLOCK()>,
44 static_assert(InputTrait::value,
"Input must be matrix-like; otherwise same value would be returned.");
55 using OutputType = OUTPUT_MINMAXBLOCK();
65 typename ::std::enable_if<TTOps == Min>::type * =
nullptr>
68 this->equation = [](Base &b) ->
void {
69 b.template o<0>() = b.template i<0>().object.minCoeff();
74 typename ::std::enable_if<TTOps == Max>::type * =
nullptr>
77 this->equation = [](Base &b) ->
void {
78 b.template o<0>() = b.template i<0>().object.maxCoeff();
84 template<
typename TInput, std::MinMaxBlockOperator TOps>
101 static const ::std::array<::std::string, kIns>
inTypes;
102 static const ::std::array<::std::string, kOuts>
outTypes;
103 static const ::std::array<::std::string, kPars>
parTypes;
108 template<
typename TInput, std::MinMaxBlockOperator TOps>
110 {demangle(
typeid(TInput).name())};
112 template<
typename TInput, std::MinMaxBlockOperator TOps>
113 const ::std::array<::std::string, BlockTraits<std::MinMaxBlock<TInput, TOps>>::kOuts> BlockTraits<std::MinMaxBlock<TInput, TOps>>::outTypes =
114 {demangle(
typeid(
typename std::MinMaxBlock<TInput, TOps>::OutputType).name())};
116 template<
typename TInput, std::MinMaxBlockOperator TOps>
117 const ::std::array<::std::string, BlockTraits<std::MinMaxBlock<TInput, TOps>>::kPars> BlockTraits<std::MinMaxBlock<TInput, TOps>>::parTypes =
120 template<
typename TInput, std::MinMaxBlockOperator TOps>
121 const ::std::array<::std::string, 2> BlockTraits<std::MinMaxBlock<TInput, TOps>>::templateTypes =
122 {demangle(
typeid(TInput).name()), demangle(
typeid(TOps).name())};
126 #undef OUTPUT_MINMAXBLOCK
129 #endif //LODESTAR_MINMAXBLOCK_HPP