1
0
mirror of https://github.com/aportelli/LatAnalyze.git synced 2025-08-02 06:27:06 +01:00

overhaul of the function class

This commit is contained in:
2015-02-24 17:00:19 +00:00
parent b061e9093f
commit 465499626b
23 changed files with 326 additions and 103 deletions

View File

@@ -39,21 +39,22 @@ private:
typedef std::function<double(const double *)> vecFunc;
public:
// constructor
explicit DoubleFunction(const Index nArg = 0,
const vecFunc &f = nullptr);
explicit DoubleFunction(const vecFunc &f = nullptr, const Index nArg = 0);
// destructor
virtual ~DoubleFunction(void) = default;
// access
virtual Index getNArg(void) const;
void setFunction(const vecFunc &f, const Index nArg);
// function call
virtual double operator()(const double *arg) const;
double operator()(const double *arg) const;
double operator()(const DVec &arg) const;
double operator()(const std::vector<double> &arg) const;
double operator()(std::stack<double> &arg) const;
double operator()(void) const;
template <typename... Ts>
double operator()(const double arg0, const Ts... args) const;
// bind
DoubleFunction bind(const Index argIndex, const double val);
// arithmetic operators
DoubleFunction operator-(void) const;
DoubleFunction & operator+=(const DoubleFunction &f);
@@ -180,6 +181,20 @@ DSample DoubleFunctionSample::operator()(const double arg0,
return (*this)(arg);
}
/******************************************************************************
* DoubleFunctionFactory class *
******************************************************************************/
class DoubleFunctionFactory
{
public:
// constructor
DoubleFunctionFactory(void) = default;
// destructor
virtual ~DoubleFunctionFactory(void) = default;
// factory
virtual DoubleFunction makeFunction(const bool makeHardCopy) const = 0;
};
END_LATAN_NAMESPACE
#endif // Latan_Function_hpp_