3 #include "SymToArgAdaptor.hh" 15 FunctionComposition SymToArgAdaptor<F>::operator()(
const AbsFunction &
function)
const 17 return AbsFunction::operator() (
function);
22 SymToArgAdaptor<F> *SymToArgAdaptor<F>::clone ()
const {
23 return (SymToArgAdaptor<F> *) _clone();
28 AbsFunction *SymToArgAdaptor<F>::_clone ()
const {
29 return new SymToArgAdaptor<F>(*this);
33 ParameterComposition SymToArgAdaptor<F>::operator()(
const AbsParameter & p)
const 35 return AbsFunction::operator() (p); \
40 SymToArgAdaptor<F>::SymToArgAdaptor(F &
function,
41 const AbsFunction & f_expression,
42 SymToArgAdaptor<F>::ScopedMethodPtr parameterFetchMethod,
43 const AbsFunction * p_expression):
45 _function(function.clone()),
46 _f_expression(f_expression.clone()),
47 _parameterFetchMethod(parameterFetchMethod),
48 _p_expression(p_expression->clone())
51 _parameterFetchMethod(*_function).setLowerLimit(-DBL_MAX);
52 _parameterFetchMethod(*_function).setUpperLimit(+DBL_MAX);
53 assert(f_expression.dimensionality()==p_expression->dimensionality());
58 SymToArgAdaptor<F>::~SymToArgAdaptor() {
66 SymToArgAdaptor<F>::SymToArgAdaptor(
const SymToArgAdaptor & right):
67 _function(right._function->clone()),
68 _f_expression(right._f_expression->clone()),
69 _parameterFetchMethod(right._parameterFetchMethod),
70 _p_expression(right._p_expression->clone())
72 _parameterFetchMethod(*_function).setLowerLimit(-DBL_MAX);
73 _parameterFetchMethod(*_function).setUpperLimit(+DBL_MAX);
79 double SymToArgAdaptor<F>::operator ()(
double x)
const 82 <<
"Warning. SymToArgAdaptor called with scalar argument" 90 unsigned int SymToArgAdaptor<F>::dimensionality()
const {
91 return _f_expression->dimensionality();
96 double SymToArgAdaptor<F>::operator() (
const Argument & a)
const {
97 if (dimensionality()!= a.dimension()) {
99 <<
"Warning: SymToArgAdaptor function/argument dimension mismatch" 106 double pVal= (*_p_expression)(a);
109 (_parameterFetchMethod(*_function)).setValue(pVal);
112 return (*_function)((*_f_expression) (a));