00001
00009 # ifndef INTERFACE_IFUNCTION_H__included__
00010 # define INTERFACE_IFUNCTION_H__included__ 1
00011
00012 # include <vector>
00013 # include <iostream>
00014
00015 #ifdef AIDA_DONT_USE_STD
00016 typedef ostream std_ostream;
00017 #else
00018 typedef std::ostream std_ostream;
00019 #endif
00020
00021 namespace Anaphe
00022 {
00023
00024
00030 class IFunction
00031 {
00032 public:
00033
00037 #ifdef AIDA_DONT_USE_STD
00038 virtual double value(const vector<double>& x) const = 0;
00039 #else
00040 virtual double value(const std::vector<double>& x) const = 0;
00041 #endif
00042
00048 #ifdef AIDA_DONT_USE_STD
00049 virtual const vector<double>& grad(const vector<double>& x) const = 0;
00050 #else
00051 virtual const std::vector<double>& grad(const std::vector<double>& x) const = 0;
00052 #endif
00053
00057 virtual bool hasGradient() const = 0;
00058
00062 virtual int dimension() const = 0;
00063
00067 virtual void toAscii(std_ostream &os) const = 0;
00068
00073 virtual bool isEqual(const IFunction * f) const = 0;
00074
00075 virtual ~IFunction() {}
00076 };
00077
00078 }
00079
00080 # endif