DUNE-ACFEM (unstable)
reassemblesum.hh
37 template<class OptimizeTag, class Pos, class Min, class TryNode, class Candidates, class SFINAE = void>
42 struct MinimizeOneHelper<OptimizeTag, TreePosition<0, 1>, void, TryNode, MPL::TypeTuple<Cand0, CandRest...> >
44 using Type = typename MinimizeOneHelper<OptimizeTag, TreePosition<0, 2>, MPL::TypePair<TreePosition<0, 1>, AddNodes<OptimizeTag, TryNode, Cand0> >, TryNode, MPL::TypeTuple<CandRest...> >::Type;
48 template<class OptimizeTag, std::size_t Row, std::size_t Col, class ArgMin, class MinNode, class TryNode, class Cand0, class... CandRest>
49 struct MinimizeOneHelper<OptimizeTag, TreePosition<Row, Col>, MPL::TypePair<ArgMin, MinNode>, TryNode, MPL::TypeTuple<Cand0, CandRest...>,
52 using Type = typename MinimizeOneHelper<OptimizeTag, TreePosition<Row, Col+1>, MPL::TypePair<TreePosition<Row, Col>, AddNodes<OptimizeTag, TryNode, Cand0> >, TryNode, MPL::TypeTuple<CandRest...> >::Type;
56 template<class OptimizeTag, std::size_t Row, std::size_t Col, class Min, class TryNode, class Cand0, class... CandRest>
57 struct MinimizeOneHelper<OptimizeTag, TreePosition<Row, Col>, Min, TryNode, MPL::TypeTuple<Cand0, CandRest...>,
58 std::enable_if_t<(Min::Second::complexity <= AddNodes<OptimizeTag, TryNode, Cand0>::complexity)> >
60 using Type = typename MinimizeOneHelper<OptimizeTag, TreePosition<Row, Col+1>, Min, TryNode, MPL::TypeTuple<CandRest...> >::Type;
72 using MinimizeOne = typename MinimizeOneHelper<OptimizeTag, TreePosition<N, N+1>, Min, Try, Rest>::Type;
80 using Type = typename MinimizeAllHelper<OptimizeTag, N+1, MinimizeOne<OptimizeTag, N, Min, Front, MPL::TypeTuple<Rest...> >, MPL::TypeTuple<Rest...> >::Type;
98 template<class Min, class Explode, class Out = MPL::TypeTuple<>, std::size_t = 0, class SFINAE = void>
101 template<std::size_t N, std::size_t LeftPos, std::size_t RightPos, class MinNode, class Head, class... Rest, class... Out>
102 struct ReplaceByMinimum<MPL::TypePair<TreePosition<LeftPos, RightPos>, MinNode>, MPL::TypeTuple<Head, Rest...>, MPL::TypeTuple<Out...>, N, std::enable_if_t<(LeftPos != N && RightPos != N)> >
104 using Type = typename ReplaceByMinimum<MPL::TypePair<TreePosition<LeftPos, RightPos>, MinNode>, MPL::TypeTuple<Rest...>, MPL::TypeTuple<Out..., Head>, N+1>::Type;
107 template<std::size_t N, std::size_t RightPos, class MinNode, class Head, class... Rest, class Out>
108 struct ReplaceByMinimum<MPL::TypePair<TreePosition<N, RightPos>, MinNode>, MPL::TypeTuple<Head, Rest...>, Out, N>
110 using Type = typename ReplaceByMinimum<MPL::TypePair<TreePosition<N, RightPos>, MinNode>, MPL::TypeTuple<Rest...>, Out, N+1>::Type;
113 template<std::size_t N, std::size_t LeftPos, class MinNode, class Head, class... Rest, class Out>
114 struct ReplaceByMinimum<MPL::TypePair<TreePosition<LeftPos, N>, MinNode>, MPL::TypeTuple<Head, Rest...>, Out, N>
116 using Type = typename ReplaceByMinimum<MPL::TypePair<TreePosition<LeftPos, N>, MinNode>, MPL::TypeTuple<Rest...>, Out, N+1>::Type;
120 struct ReplaceByMinimum<MPL::TypePair<MinPos, MinNode>, MPL::TypeTuple<>, MPL::TypeTuple<Out...>, N>
128 using Type = typename ReassembleHelper<OptimizeTag, typename ReplaceByMinimum<MinimizeAll<OptimizeTag, Explode>, Explode>::Type>::Type;
STL namespace.
Collect sign, operation and data-types of the operands for a binary operation.
Definition: operationpair.hh:25
Optimization pattern disambiguation struct.
Definition: optimizationbase.hh:42
Definition: reassemblesum.hh:13
Definition: reassemblesum.hh:99
Gets the type of the n-th element of a tuple-like or the std::integral_constant corresponding to the ...
Definition: access.hh:42
