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 AbsParameter(const AbsParameter &);
00032
00033
00034 virtual ~AbsParameter();
00035
00036
00037 virtual double getValue() const=0;
00038
00039
00040 AbsParameter * clone() const;
00041
00042
00043 virtual Parameter *parameter() {return 0;}
00044 virtual const Parameter *parameter() const {return 0;}
00045
00046 private:
00047
00048
00049 AbsParameter & operator= (const AbsParameter &);
00050
00051 virtual AbsParameter *_clone() const=0;
00052
00053 };
00054
00055
00056
00057
00058 ConstTimesParameter operator * (double c, const AbsParameter &op2);
00059 ConstPlusParameter operator + (double c, const AbsParameter &op2);
00060 ConstMinusParameter operator - (double c, const AbsParameter &op2);
00061 ConstOverParameter operator / (double c, const AbsParameter &op2);
00062
00063 ConstTimesParameter operator * (const AbsParameter &op2, double c);
00064 ConstPlusParameter operator + (const AbsParameter &op2, double c);
00065 ConstPlusParameter operator - (const AbsParameter &op2, double c);
00066 ConstTimesParameter operator / (const AbsParameter &op2, double c);
00067
00068
00069 ParameterProduct operator * (const AbsParameter &op1, const AbsParameter &op2);
00070 ParameterSum operator + (const AbsParameter &op1, const AbsParameter &op2);
00071 ParameterDifference operator - (const AbsParameter &op1, const AbsParameter &op2);
00072 ParameterQuotient operator / (const AbsParameter &op1, const AbsParameter &op2);
00073 ParameterNegation operator - (const AbsParameter &op1);
00074
00075 typedef const AbsParameter & GENPARAMETER;
00076
00077 }
00078
00079
00080 #define PARAMETER_OBJECT_DEF(classname) \
00081 public: \
00082 classname *clone() const; \
00083 private: \
00084 virtual AbsParameter* _clone() const;
00085
00086
00087 #define PARAMETER_OBJECT_IMP(classname) \
00088 classname *classname::clone () const { \
00089 return (classname *) _clone(); \
00090 } \
00091 AbsParameter *classname::_clone () const { \
00092 return new classname(*this); \
00093 }
00094
00095
00096 #include "CLHEP/GenericFunctions/ParameterProduct.hh"
00097 #include "CLHEP/GenericFunctions/ParameterSum.hh"
00098 #include "CLHEP/GenericFunctions/ParameterDifference.hh"
00099 #include "CLHEP/GenericFunctions/ParameterQuotient.hh"
00100 #include "CLHEP/GenericFunctions/ParameterNegation.hh"
00101 #include "CLHEP/GenericFunctions/ConstPlusParameter.hh"
00102 #include "CLHEP/GenericFunctions/ConstMinusParameter.hh"
00103 #include "CLHEP/GenericFunctions/ConstTimesParameter.hh"
00104 #include "CLHEP/GenericFunctions/ConstOverParameter.hh"
00105
00106 #endif