private: \
template <functionspace comp = functionspace::interior, \
bool memory_optimized = false, std::size_t... Is, \
typename Geometry, typename... Xi> \
inline auto BOOST_PP_CAT(name, _all_)(std::index_sequence<Is...>, \
const Geometry &G, \
const std::tuple<Xi...> &xi) const { \
if constexpr (comp == functionspace::interior) { \
if constexpr (Geometry::nspaces() == 1) \
return std::tuple( \
std::get<Is>(spline_).template name<memory_optimized>( \
G.space(), std::get<Is>(xi))...); \
else if constexpr (Geometry::nspaces() == nspaces()) \
return std::tuple( \
std::get<Is>(spline_).template name<memory_optimized>( \
G.template space<Is>(), std::get<Is>(xi))...); \
} else if constexpr (comp == functionspace::boundary) { \
if constexpr (Geometry::nboundaries() == 1) \
return std::tuple( \
std::get<Is>(boundary_).template name<memory_optimized>( \
static_cast<typename Geometry::boundary_type::boundary_type>( \
G.boundary().coeffs()), \
std::get<Is>(xi))...); \
else if constexpr (Geometry::nboundaries() == nboundaries()) \
return std::tuple( \
std::get<Is>(boundary_).template name<memory_optimized>( \
G.template boundary<Is>().coeffs(), std::get<Is>(xi))...); \
} \
} \
\
bool memory_optimized = false, std::size_t... Is, \
typename Geometry, typename... Xi, typename... Knot_Indices, \
typename... Knot_Indices_G> \
inline auto BOOST_PP_CAT(name, _all_)( \
std::index_sequence<Is...>, const Geometry &G, \
const std::tuple<Xi...> &xi, \
const std::tuple<Knot_Indices...> &knot_indices, \
const std::tuple<Knot_Indices_G...> &knot_indices_G) const { \
if constexpr (comp == functionspace::interior) { \
if constexpr (Geometry::nspaces() == 1) \
return std::tuple( \
std::get<Is>(spline_).template name<memory_optimized>( \
G.space(), std::get<Is>(xi), std::get<Is>(knot_indices), \
std::get<Is>(knot_indices_G))...); \
else \
return std::tuple( \
std::get<Is>(spline_).template name<memory_optimized>( \
std::get<Is>(G), std::get<Is>(xi), std::get<Is>(knot_indices), \
std::get<Is>(knot_indices_G))...); \
} else if constexpr (comp == functionspace::boundary) { \
if constexpr (Geometry::nspaces() == 1) \
return std::tuple( \
std::get<Is>(boundary_).template name<memory_optimized>( \
static_cast<typename Geometry::boundary_type::boundary_type>( \
G.boundary().coeffs()), \
std::get<Is>(xi), std::get<Is>(knot_indices), \
std::get<Is>(knot_indices_G))...); \
else \
return std::tuple( \
std::get<Is>(boundary_).template name<memory_optimized>( \
std::get<Is>(G).
boundary().coeffs(), std::get<Is>(xi), \
std::get<Is>(knot_indices), std::get<Is>(knot_indices_G))...); \
} \
} \
\
bool memory_optimized = false, std::size_t... Is, \
typename Geometry, typename... Xi, typename... Knot_Indices, \
typename... Coeff_Indices, typename... Knot_Indices_G, \
typename... Coeff_Indices_G> \
inline auto BOOST_PP_CAT(name, _all_)( \
std::index_sequence<Is...>, const Geometry &G, \
const std::tuple<Xi...> &xi, \
const std::tuple<Knot_Indices...> &knot_indices, \
const std::tuple<Coeff_Indices...> &coeff_indices, \
const std::tuple<Knot_Indices_G...> &knot_indices_G, \
const std::tuple<Coeff_Indices_G...> &coeff_indices_G) const { \
if constexpr (comp == functionspace::interior) { \
if constexpr (Geometry::nspaces() == 1) \
return std::tuple( \
std::get<Is>(spline_).template name<memory_optimized>( \
G.space(), std::get<Is>(xi), std::get<Is>(knot_indices), \
std::get<Is>(coeff_indices), std::get<Is>(knot_indices_G), \
std::get<Is>(coeff_indices_G))...); \
else \
return std::tuple( \
std::get<Is>(spline_).template name<memory_optimized>( \
std::get<Is>(G), std::get<Is>(xi), std::get<Is>(knot_indices), \
std::get<Is>(coeff_indices), std::get<Is>(knot_indices_G), \
std::get<Is>(coeff_indices_G))...); \
} else if constexpr (comp == functionspace::boundary) { \
if constexpr (Geometry::nspaces() == 1) \
return std::tuple( \
std::get<Is>(boundary_).template name<memory_optimized>( \
static_cast<typename Geometry::boundary_type::boundary_type>( \
G.boundary().coeffs()), \
std::get<Is>(xi), std::get<Is>(knot_indices), \
std::get<Is>(coeff_indices), std::get<Is>(knot_indices_G), \
std::get<Is>(coeff_indices_G))...); \
else \
return std::tuple( \
std::get<Is>(boundary_).template name<memory_optimized>( \
std::get<Is>(G).
boundary().coeffs(), std::get<Is>(xi), \
std::get<Is>(knot_indices), std::get<Is>(coeff_indices), \
std::get<Is>(knot_indices_G), \
std::get<Is>(coeff_indices_G))...); \
} \
} \
\
public: \
bool memory_optimized = false, typename... Args> \
inline auto BOOST_PP_CAT(name, _all)(const Args &...args) const { \
return BOOST_PP_CAT(name, _all_)<comp, memory_optimized>( \
std::make_index_sequence<FunctionSpace::nspaces()>{}, args...); \
}
Auto-generated functions.