CLHEP/GenericFunctions/AbsParameter.hh

00001 // -*- C++ -*-
00002 // $Id: AbsParameter.hh,v 1.5 2002/05/27 13:07:16 evc 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     // Destructor
00031     virtual ~AbsParameter();
00032   
00033     // Parameter value
00034     virtual double getValue()  const=0;   
00035 
00036     // Every parameter must override this:
00037     AbsParameter * clone() const;
00038 
00039     // Extra lingual type information:
00040     virtual Parameter *parameter() {return 0;}
00041     virtual const Parameter *parameter() const {return 0;}
00042 
00043   public:  // was private:
00044 
00045     // Cannot copy an AbsParameter:
00046     AbsParameter(const AbsParameter &);
00047 
00048   private:
00049 
00050     // Cannot assign an AbsParameter:
00051     AbsParameter & operator= (const AbsParameter &);
00052 
00053     virtual AbsParameter *_clone() const=0;
00054 
00055   };
00056 
00057 // Now for some additional operations:
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 } // namespace Genfun   
00080 
00081 // Poor man's covariant return type:
00082 #define PARAMETER_OBJECT_DEF(classname)              \
00083 public:                                              \
00084   classname *clone() const;                          \
00085 private:                                             \
00086   virtual AbsParameter* _clone() const;
00087 
00088 // Poor man's covariant return type:  
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

Class Library for High Energy Physics (version 1.8)