CLHEP VERSION Reference Documentation
CLHEP Home Page CLHEP Documentation CLHEP Bug Reports |
00001 // -*- C++ -*- 00002 // $Id: AbsParameter.hh,v 1.2 2003/09/06 14:04:13 boudreau Exp $ 00003 #ifndef _AbsParameter_h_ 00004 #define _AbsParameter_h_ 00005 00006 namespace Genfun { 00007 class Parameter; 00008 class ParameterSum; 00009 class ParameterDifference; 00010 class ParameterProduct; 00011 class ParameterQuotient; 00012 class ParameterNegation; 00013 class ConstPlusParameter; 00014 class ConstMinusParameter; 00015 class ConstTimesParameter; 00016 class ConstOverParameter; 00017 00022 class AbsParameter { 00023 00024 public: 00025 00026 // Default Constructor 00027 AbsParameter(); 00028 00029 // Copy constructor: 00030 AbsParameter(const AbsParameter &); 00031 00032 // Destructor 00033 virtual ~AbsParameter(); 00034 00035 // Parameter value 00036 virtual double getValue() const=0; 00037 00038 // Every parameter must override this: 00039 AbsParameter * clone() const; 00040 00041 // Extra lingual type information: 00042 virtual Parameter *parameter() {return 0;} 00043 virtual const Parameter *parameter() const {return 0;} 00044 00045 private: 00046 00047 // Cannot assign an AbsParameter: 00048 AbsParameter & operator= (const AbsParameter &); 00049 00050 virtual AbsParameter *_clone() const=0; 00051 00052 }; 00053 00054 // Now for some additional operations: 00055 00056 00057 ConstTimesParameter operator * (double c, const AbsParameter &op2); 00058 ConstPlusParameter operator + (double c, const AbsParameter &op2); 00059 ConstMinusParameter operator - (double c, const AbsParameter &op2); 00060 ConstOverParameter operator / (double c, const AbsParameter &op2); 00061 00062 ConstTimesParameter operator * (const AbsParameter &op2, double c); 00063 ConstPlusParameter operator + (const AbsParameter &op2, double c); 00064 ConstPlusParameter operator - (const AbsParameter &op2, double c); 00065 ConstTimesParameter operator / (const AbsParameter &op2, double c); 00066 00067 00068 ParameterProduct operator * (const AbsParameter &op1, const AbsParameter &op2); 00069 ParameterSum operator + (const AbsParameter &op1, const AbsParameter &op2); 00070 ParameterDifference operator - (const AbsParameter &op1, const AbsParameter &op2); 00071 ParameterQuotient operator / (const AbsParameter &op1, const AbsParameter &op2); 00072 ParameterNegation operator - (const AbsParameter &op1); 00073 00074 typedef const AbsParameter & GENPARAMETER; 00075 00076 } // namespace Genfun 00077 00078 // Poor man's covariant return type: 00079 #define PARAMETER_OBJECT_DEF(classname) \ 00080 public: \ 00081 classname *clone() const; \ 00082 private: \ 00083 virtual AbsParameter* _clone() const; 00084 00085 // Poor man's covariant return type: 00086 #define PARAMETER_OBJECT_IMP(classname) \ 00087 classname *classname::clone () const { \ 00088 return (classname *) _clone(); \ 00089 } \ 00090 AbsParameter *classname::_clone () const { \ 00091 return new classname(*this); \ 00092 } 00093 00094 00095 #include "CLHEP/GenericFunctions/ParameterProduct.hh" 00096 #include "CLHEP/GenericFunctions/ParameterSum.hh" 00097 #include "CLHEP/GenericFunctions/ParameterDifference.hh" 00098 #include "CLHEP/GenericFunctions/ParameterQuotient.hh" 00099 #include "CLHEP/GenericFunctions/ParameterNegation.hh" 00100 #include "CLHEP/GenericFunctions/ConstPlusParameter.hh" 00101 #include "CLHEP/GenericFunctions/ConstMinusParameter.hh" 00102 #include "CLHEP/GenericFunctions/ConstTimesParameter.hh" 00103 #include "CLHEP/GenericFunctions/ConstOverParameter.hh" 00104 00105 #endif