11#ifndef __7e4ffaa81e244723acbfbbaea68e03b1
12#define __7e4ffaa81e244723acbfbbaea68e03b1
14#include <lf/mesh/mesh.h>
24using MeshFunctionReturnType_t =
decltype(std::declval<T>()(
25 std::declval<const Entity>(), std::declval<const Eigen::MatrixXd>()));
28struct VectorElementType {
32template <
typename T,
typename A>
33struct VectorElementType<std::vector<T, A>> {
38using VectorElement_t =
typename VectorElementType<T>::type;
40template <
class T,
class RETURN_TYPE,
41 class =
typename std::enable_if<!std::is_same_v<
42 VectorElement_t<MeshFunctionReturnType_t<T>>,
void>>::type>
43constexpr bool IsMeshFunctionCallable(
int ) {
44 if constexpr (std::is_same_v<RETURN_TYPE, void>) {
51 return std::is_same_v<VectorElement_t<MeshFunctionReturnType_t<T>>,
55template <
class T,
class RETURN_TYPE>
56constexpr bool IsMeshFunctionCallable(
long ) {
69template <
class T,
class R =
void>
71 !std::is_reference_v<T> && std::is_copy_constructible_v<T> &&
72 std::is_move_constructible_v<T> &&
73 internal::IsMeshFunctionCallable<T, R>(0);
81 internal::VectorElement_t<internal::MeshFunctionReturnType_t<R>>;
Contains helper functions and classes that all operate on the interface classes defined in lf::mesh.
internal::VectorElement_t< internal::MeshFunctionReturnType_t< R > > MeshFunctionReturnType
Determine the type of objects returned by a MeshFunction.
constexpr bool isMeshFunction
Determine whether a given type fulfills the concept MeshFunction.