1 // -*- C++ -*- 2 // $Id: AbsParameter.hh,v 1.2 2003/09/06 14:04:13 boudreau Exp $ 3 #ifndef _AbsParameter_h_ 4 #define _AbsParameter_h_ 5 6 namespace Genfun { 7 class Parameter; 8 class ParameterSum; 9 class ParameterDifference; 10 class ParameterProduct; 11 class ParameterQuotient; 12 class ParameterNegation; 13 class ConstPlusParameter; 14 class ConstMinusParameter; 15 class ConstTimesParameter; 16 class ConstOverParameter; 17 18 /** 19 * @author 20 * @ingroup genfun 21 */ 22 class AbsParameter { 23 24 public: 25 26 // Default Constructor 27 AbsParameter(); 28 29 // Copy constructor: 30 AbsParameter(const AbsParameter &); 31 32 // Destructor 33 virtual ~AbsParameter(); 34 35 // Parameter value 36 virtual double getValue() const=0; 37 38 // Every parameter must override this: 39 AbsParameter * clone() const; 40 41 // Extra lingual type information: parameter()42 virtual Parameter *parameter() {return 0;} parameter() const43 virtual const Parameter *parameter() const {return 0;} 44 45 private: 46 47 // Cannot assign an AbsParameter: 48 AbsParameter & operator= (const AbsParameter &); 49 50 virtual AbsParameter *_clone() const=0; 51 52 }; 53 54 // Now for some additional operations: 55 56 57 ConstTimesParameter operator * (double c, const AbsParameter &op2); 58 ConstPlusParameter operator + (double c, const AbsParameter &op2); 59 ConstMinusParameter operator - (double c, const AbsParameter &op2); 60 ConstOverParameter operator / (double c, const AbsParameter &op2); 61 62 ConstTimesParameter operator * (const AbsParameter &op2, double c); 63 ConstPlusParameter operator + (const AbsParameter &op2, double c); 64 ConstPlusParameter operator - (const AbsParameter &op2, double c); 65 ConstTimesParameter operator / (const AbsParameter &op2, double c); 66 67 68 ParameterProduct operator * (const AbsParameter &op1, const AbsParameter &op2); 69 ParameterSum operator + (const AbsParameter &op1, const AbsParameter &op2); 70 ParameterDifference operator - (const AbsParameter &op1, const AbsParameter &op2); 71 ParameterQuotient operator / (const AbsParameter &op1, const AbsParameter &op2); 72 ParameterNegation operator - (const AbsParameter &op1); 73 74 typedef const AbsParameter & GENPARAMETER; 75 76 } // namespace Genfun 77 78 // Poor man's covariant return type: 79 #define PARAMETER_OBJECT_DEF(classname) \ 80 public: \ 81 classname *clone() const; \ 82 private: \ 83 virtual AbsParameter* _clone() const; 84 85 // Poor man's covariant return type: 86 #define PARAMETER_OBJECT_IMP(classname) \ 87 classname *classname::clone () const { \ 88 return (classname *) _clone(); \ 89 } \ 90 AbsParameter *classname::_clone () const { \ 91 return new classname(*this); \ 92 } 93 94 95 #include "CLHEP/GenericFunctions/ParameterProduct.hh" 96 #include "CLHEP/GenericFunctions/ParameterSum.hh" 97 #include "CLHEP/GenericFunctions/ParameterDifference.hh" 98 #include "CLHEP/GenericFunctions/ParameterQuotient.hh" 99 #include "CLHEP/GenericFunctions/ParameterNegation.hh" 100 #include "CLHEP/GenericFunctions/ConstPlusParameter.hh" 101 #include "CLHEP/GenericFunctions/ConstMinusParameter.hh" 102 #include "CLHEP/GenericFunctions/ConstTimesParameter.hh" 103 #include "CLHEP/GenericFunctions/ConstOverParameter.hh" 104 105 #endif 106