diff --git a/lib/Function.cpp b/lib/Function.cpp index 974a707..09c1873 100644 --- a/lib/Function.cpp +++ b/lib/Function.cpp @@ -105,12 +105,35 @@ double DoubleFunction::operator()(void) const ******************************************************************************/ DSample DoubleFunctionSample::operator()(const DMatSample &arg) const { - DSample result(arg.size()); + DSample result(size()); - FOR_STAT_ARRAY(arg, s) + FOR_STAT_ARRAY((*this), s) { result[s] = (*this)[s](arg[s]); } return result; } + +DSample DoubleFunctionSample::operator()(const double *arg) const +{ + DSample result(size()); + + FOR_STAT_ARRAY((*this), s) + { + result[s] = (*this)[s](arg); + } + + return result; +} + +DSample DoubleFunctionSample::operator()(const DVec &arg) const +{ + return (*this)(arg.data()); +} + +DSample DoubleFunctionSample::operator()(const vector &arg) const +{ + return (*this)(arg.data()); +} + diff --git a/lib/Function.hpp b/lib/Function.hpp index b3555f0..dd37374 100644 --- a/lib/Function.hpp +++ b/lib/Function.hpp @@ -86,8 +86,21 @@ public: virtual ~DoubleFunctionSample(void) = default; // function call DSample operator()(const DMatSample &arg) const; + DSample operator()(const double *arg) const; + DSample operator()(const DVec &arg) const; + DSample operator()(const std::vector &arg) const; + template + DSample operator()(const double arg0, const Ts... args) const; }; +template +DSample DoubleFunctionSample::operator()(const double arg0, + const Ts... args) const +{ + const double arg[] = {arg0, args...}; + + return (*this)(arg); +} END_NAMESPACE