00001
00002
00003 #ifndef _AbsParameter_h_
00004 #define _AbsParameter_h_
00005
00006 #include "CLHEP/config/CLHEP.h"
00007 namespace Genfun {
00008 class Parameter;
00009 class ParameterSum;
00010 class ParameterDifference;
00011 class ParameterProduct;
00012 class ParameterQuotient;
00013 class ParameterNegation;
00014 class ConstPlusParameter;
00015 class ConstMinusParameter;
00016 class ConstTimesParameter;
00017 class ConstOverParameter;
00018
00023 class AbsParameter {
00024
00025 public:
00026
00027
00028 AbsParameter();
00029
00030
00031 virtual ~AbsParameter();
00032
00033
00034 virtual double getValue() const=0;
00035
00036
00037 AbsParameter * clone() const;
00038
00039
00040 virtual Parameter *parameter() {return 0;}
00041 virtual const Parameter *parameter() const {return 0;}
00042
00043 public:
00044
00045
00046 AbsParameter(const AbsParameter &);
00047
00048 private:
00049
00050
00051 AbsParameter & operator= (const AbsParameter &);
00052
00053 virtual AbsParameter *_clone() const=0;
00054
00055 };
00056
00057
00058
00059
00060 ConstTimesParameter operator * (double c, const AbsParameter &op2);
00061 ConstPlusParameter operator + (double c, const AbsParameter &op2);
00062 ConstMinusParameter operator - (double c, const AbsParameter &op2);
00063 ConstOverParameter operator / (double c, const AbsParameter &op2);
00064
00065 ConstTimesParameter operator * (const AbsParameter &op2, double c);
00066 ConstPlusParameter operator + (const AbsParameter &op2, double c);
00067 ConstPlusParameter operator - (const AbsParameter &op2, double c);
00068 ConstTimesParameter operator / (const AbsParameter &op2, double c);
00069
00070
00071 ParameterProduct operator * (const AbsParameter &op1, const AbsParameter &op2);
00072 ParameterSum operator + (const AbsParameter &op1, const AbsParameter &op2);
00073 ParameterDifference operator - (const AbsParameter &op1, const AbsParameter &op2);
00074 ParameterQuotient operator / (const AbsParameter &op1, const AbsParameter &op2);
00075 ParameterNegation operator - (const AbsParameter &op1);
00076
00077 typedef const AbsParameter & GENPARAMETER;
00078
00079 }
00080
00081
00082 #define PARAMETER_OBJECT_DEF(classname) \
00083 public: \
00084 classname *clone() const; \
00085 private: \
00086 virtual AbsParameter* _clone() const;
00087
00088
00089 #define PARAMETER_OBJECT_IMP(classname) \
00090 classname *classname::clone () const { \
00091 return (classname *) _clone(); \
00092 } \
00093 AbsParameter *classname::_clone () const { \
00094 return new classname(*this); \
00095 }
00096
00097
00098 #include "CLHEP/GenericFunctions/ParameterProduct.hh"
00099 #include "CLHEP/GenericFunctions/ParameterSum.hh"
00100 #include "CLHEP/GenericFunctions/ParameterDifference.hh"
00101 #include "CLHEP/GenericFunctions/ParameterQuotient.hh"
00102 #include "CLHEP/GenericFunctions/ParameterNegation.hh"
00103 #include "CLHEP/GenericFunctions/ConstPlusParameter.hh"
00104 #include "CLHEP/GenericFunctions/ConstMinusParameter.hh"
00105 #include "CLHEP/GenericFunctions/ConstTimesParameter.hh"
00106 #include "CLHEP/GenericFunctions/ConstOverParameter.hh"
00107
00108 #endif