27 #ifndef VISIONCPP_INCLUDE_FRAMEWORK_EXPR_TREE_COMPLEX_OPS_PYRAMID_WITH_AUTO_MEM_GEN_HPP_
28 #define VISIONCPP_INCLUDE_FRAMEWORK_EXPR_TREE_COMPLEX_OPS_PYRAMID_WITH_AUTO_MEM_GEN_HPP_
65 template <
bool SatisfyingConds,
typename Fltr2DOP,
typename DownSmplOP,
66 size_t Cols,
size_t Rows,
size_t LeafType,
size_t OffsetCol,
67 size_t OffsetRow,
size_t LVL,
size_t LC,
size_t LR,
size_t LRT,
68 size_t LCT,
size_t Depth,
size_t CurrentDepth,
typename LHS,
69 typename RHS,
typename Fltr2D,
typename PyramidMem,
typename DeviceT>
80 static void sub_execute(RHS &rhs, Fltr2D &fltr2D, PyramidMem &mem,
84 typename Fltr2D::OutType>,
85 Fltr2D::Type::Rows / 2, Fltr2D::Type::Cols / 2,
86 Fltr2D::Type::Rows / 2, Fltr2D::Type::Cols / 2, RHS,
87 Fltr2D, Cols, Rows, LeafType,
89 Fltr2D>::Type::Level>(rhs, fltr2D);
92 decltype(a), Cols / 2, Rows / 2, LeafType, 1 + decltype(a)::Level>(
95 tools::tuple::get<CurrentDepth>(mem))>::Type;
96 auto c =
Assign<RHSType, decltype(b), Cols / 2, Rows / 2, LeafType, LVL>(
97 tools::tuple::get<CurrentDepth>(mem), b);
98 fuse<LC, LR, LCT, LRT>(c, dev);
101 (Depth == (CurrentDepth + 1)), Fltr2DOP, DownSmplOP, Cols / 2, Rows / 2,
102 LeafType, OffsetCol, OffsetRow + Rows / 2, RHSType::Level + 1, LC, LR,
103 LCT, LRT, Depth, CurrentDepth + 1, LHS, RHSType, Fltr2D,
104 PyramidMem, DeviceT>
::sub_execute(tools::tuple::get<CurrentDepth>(mem), fltr2D,
111 template <
typename Fltr2DOP,
typename DownSmplOP,
size_t Cols,
size_t Rows,
112 size_t LeafType,
size_t OffsetCol,
size_t OffsetRow,
size_t LVL,
113 size_t LC,
size_t LR,
size_t LCT,
size_t LRT,
size_t Depth,
114 size_t CurrentDepth,
typename LHS,
typename RHS,
typename Fltr2D,
115 typename PyramidMem,
typename DeviceT>
117 true, Fltr2DOP, DownSmplOP, Cols, Rows, LeafType, OffsetCol, OffsetRow, LVL,
118 LC, LR, LCT, LRT, Depth, CurrentDepth, LHS, RHS, Fltr2D, PyramidMem, DeviceT> {
119 static void sub_execute(RHS &rhs, Fltr2D &fltr2D, PyramidMem &mem,
120 const DeviceT &dev) {}
138 template <
typename Fltr2DOP,
typename DownSmplOP,
typename RHS,
typename Fltr2D,
139 size_t Cols,
size_t Rows,
size_t LfType,
size_t LVL,
size_t Dp>
146 static constexpr
size_t Level = LVL;
180 Rows, LfType, LVL, Dp>;
208 template <
bool ForcedToExec,
size_t LC,
size_t LR,
size_t LCT,
size_t LRT,
211 const DeviceT &dev) {
214 rhs.template sub_expression_evaluation<false, LC, LR, LCT, LRT>(dev);
216 Depth == 0,
typename Fltr2DOP::OP,
typename DownSmplOP::OP, Cols, Rows,
217 LeafType, Cols, 0, 1 + LVL, LC, LR, LCT, LRT,
Depth, 0,
LHSExpr,
218 decltype(eval_sub), Fltr2D,
PyramidMem, DeviceT>::sub_execute(eval_sub,
fltr2D,
226 template <
typename Fltr2DOP,
typename DownSmplOP,
size_t Depth,
typename RHS,
230 typename Fltr2D::OutType>,
232 RHS::Type::Cols, RHS::Type::Rows, RHS::Type::LeafType,
234 Fltr2D>::Type::Level,
238 typename Fltr2D::OutType>,
240 RHS::Type::Cols, RHS::Type::Rows, RHS::Type::LeafType,
242 Fltr2D>::Type::Level,
static constexpr size_t Binary
constexpr static size_t GlobalNeighbourOP
CreatePyramidTupleType< false, Cols, Rows, LHS::Type::LeafType, Depth, 0, LHS >::Type create_pyramid_memory()
create_pyramid_memory template deduction function for CreatePyramidTuple struct.
auto pyramid_down(RHS rhs, Fltr2D fltr2D) -> internal::PyramidAutomemGen< internal::LocalBinaryOp< Fltr2DOP, typename RHS::OutType, typename Fltr2D::OutType >, internal::LocalUnaryOp< DownSmplOP, typename RHS::OutType >, RHS, Fltr2D, RHS::Type::Cols, RHS::Type::Rows, RHS::Type::LeafType, 1+internal::tools::StaticIf<(RHS::Level > Fltr2D::Level), RHS, Fltr2D >::Type::Level, Depth >
pyramid_auto_generate
The definition is in Assign file.
CreatePyramidTupleType: This file is used to create each output element type for each downsampling ou...
the definition is in LeafNode.
This class is used to encapsulate the local binary functor and the types of each operand in this func...
This class is used to encapsulate the local unary functor and the types of each operand in this funct...
OutputMemory is used to deduce the output type of each node in the expression tree by using certain p...
PyramidDownGen is used to construct a pyramid node in the expression tree with general Filter2D and g...
static constexpr size_t LeafType
static constexpr size_t CThread
static constexpr size_t Operation_type
static constexpr size_t Level
static constexpr bool SubExpressionEvaluationNeeded
typename DownSmplOP::OutType OutType
LeafNode< Type, LVL > LHSExpr
typename CreatePyramidTupleType< false, Cols/2, Rows/2, LeafType, Depth, 0, LHSExpr >::Type PyramidMem
static constexpr bool has_out
typename OutputMemory< OutType, LfType, Cols+Cols/2, Rows, LVL >::Type Type
PyramidLeafNode< PyramidType, 0 > sub_expression_evaluation(const DeviceT &dev)
sub_expression_evaluation
static constexpr size_t RThread
PyramidLeafNode< PyramidType, N > get()
method get
PyramidAutomemGen(RHS rhsArg, Fltr2D fltr2DArg)
static constexpr size_t Depth
bool subexpr_execution_reseter
static constexpr size_t ND_Category
visioncpp::internal::PyramidExecuteAutoMemGen< true, Fltr2DOP, DownSmplOP, Cols, Rows, LeafType, OffsetCol, OffsetRow, LVL, LC, LR, LCT, LRT, Depth, CurrentDepth, LHS, RHS, Fltr2D, PyramidMem, DeviceT >::sub_execute static void sub_execute(RHS &rhs, Fltr2D &fltr2D, PyramidMem &mem, const DeviceT &dev)
here we execute the pyramid; automatically construct the output tuple based on the depth of the pyram...
static void sub_execute(RHS &rhs, Fltr2D &fltr2D, PyramidMem &mem, const DeviceT &dev)
function sub_execute
The definition is in RDCN file.
The definition is in StnFilt file.