CLHEP/GenericFunctions/AbsParameter.hh

00001 // -*- C++ -*-
00002 // $Id: AbsParameter.hh,v 1.6 2003/09/03 08:45:50 pvs Exp $
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     // Default Constructor
00028     AbsParameter();
00029     
00030     // Copy constructor:
00031     AbsParameter(const AbsParameter &);
00032 
00033     // Destructor
00034     virtual ~AbsParameter();
00035   
00036     // Parameter value
00037     virtual double getValue()  const=0;   
00038 
00039     // Every parameter must override this:
00040     AbsParameter * clone() const;
00041 
00042     // Extra lingual type information:
00043     virtual Parameter *parameter() {return 0;}
00044     virtual const Parameter *parameter() const {return 0;}
00045 
00046   private:
00047 
00048     // Cannot assign an AbsParameter:
00049     AbsParameter & operator= (const AbsParameter &);
00050 
00051     virtual AbsParameter *_clone() const=0;
00052 
00053   };
00054 
00055 // Now for some additional operations:
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 } // namespace Genfun   
00078 
00079 // Poor man's covariant return type:
00080 #define PARAMETER_OBJECT_DEF(classname)              \
00081 public:                                              \
00082   classname *clone() const;                          \
00083 private:                                             \
00084   virtual AbsParameter* _clone() const;
00085 
00086 // Poor man's covariant return type:  
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

Class Library for High Energy Physics (version 1.8)