00001
00002
00014 #ifndef _FunctionBase_H_
00015 #define _FunctionBase_H_
00016
00017 #ifdef HAVE_CONFIG_H
00018 #include "config.h"
00019 #endif
00020
00021 #include "pattern/libhippo.h"
00022
00023 #include <string>
00024 #include <vector>
00025
00026 class FunctionHelper;
00027
00092 class MDL_HIPPOPLOT_API FunctionBase
00093 {
00094
00095 protected:
00096
00098 FunctionBase ();
00099
00102 FunctionBase ( const FunctionBase & );
00103
00105 std::string m_name;
00106
00108 std::vector<std::string> m_parm_names;
00109
00111 std::vector < double > m_parms;
00112
00113
00116 void setName ( const char * );
00117
00122 virtual void resize ();
00123
00131 virtual void initialize ();
00132
00133 public:
00134
00135
00137 virtual ~FunctionBase();
00138
00140 const std::string & name () const;
00141
00149 virtual FunctionBase * clone () const;
00150
00152 virtual int size () const;
00153
00155 virtual const std::vector < std::string > & parmNames ( ) const;
00156
00159 void setParmNames ( const std::vector < std::string > & names );
00160
00164 virtual bool isComposite () const;
00165
00169 virtual void addToComposite ( FunctionBase * );
00170
00174 virtual void removeFromComposite ( FunctionBase * );
00175
00179 virtual int count ();
00180
00184 virtual const std::vector< double > & getParameters ();
00185
00190 virtual void setParameters ( const std::vector< double > & incr );
00191
00195 virtual std::vector< double >::const_iterator
00196 setParameters ( std::vector< double >::const_iterator it );
00197
00209 virtual double derivByParm ( int i, double x ) const;
00210
00215 virtual double operator() ( double x ) const;
00216
00222 virtual double operator () ( const std::vector < double > & v ) const;
00223
00226 virtual void initialParameters ( const FunctionHelper * helper );
00227
00235 virtual bool hasDerivatives () const;
00236
00242 virtual double integrate ( double lower_limit, double upper_limit ) const;
00243
00244 };
00245
00246 #endif // _FunctionBase_H_