3 #ifndef DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH
4 #define DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH
8 #include <dune/common/typeutilities.hh>
28 template<
class Signature,
class LocalContext,
template<
class>
class DerivativeTraits=DefaultDerivativeTraits,
size_t bufferSize=56>
38 template<
class S,
class L,
template<
class>
class DerivativeTraits,
size_t bufferSize>
39 struct LocalFunctionTraits :
40 DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>
43 using Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;
47 using LocalContext = L;
50 using DerivativeSignature =
typename Base::DerivativeSignature;
56 using Concept = LocalFunctionWrapperInterface<S, DerivativeInterface, L>;
60 using Model = LocalFunctionWrapperImplementation<S, DerivativeInterface, L, B>;
86 template<
class Range,
class Domain,
class LocalContext,
template<
class>
class DerivativeTraits,
size_t bufferSize>
87 class LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize> :
89 typename Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>::Concept,
90 Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>::template Model>
92 using Traits = Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>;
111 template<
class F, disableCopyMove<LocalFunction, F> = 0 >
113 Base(std::forward<F>(f))
123 Range operator() (
const Domain& x)
const
125 return this->asInterface().operator()(x);
137 return t.asInterface().derivative();
146 void bind(
const LocalContext& context)
148 this->asInterface().bind(context);
156 this->asInterface().unbind();
164 return this->asInterface().localContext();
174 #endif // DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH