GeoModel - GeoModelCore
AbsParameter.h
1 //==========================================================================//
2 // Imported from the QAT library (qat.pitt.edu) by the copyright holder //
3 // Joe Boudreau. Software licensed under the terms and conditions of the //
4 // GNU Lesser Public License v3. //
5 //==========================================================================//
6 
7 // -------------------------------------------------------------------//
8 // //
9 // AbsParameter, a base class for all parameters, which are //
10 // essentially adjustable constants. //
11 // //
12 //--------------------------------------------------------------------//
13 #ifndef _AbsParameter_h_
14 #define _AbsParameter_h_
15 
16 namespace GeoGenfun {
17  class Parameter;
18  class ParameterSum;
19  class ParameterDifference;
20  class ParameterProduct;
21  class ParameterQuotient;
22  class ParameterNegation;
23  class ConstPlusParameter;
24  class ConstMinusParameter;
25  class ConstTimesParameter;
26  class ConstOverParameter;
27 
28  class AbsParameter {
29 
30  public:
31 
32  // Default Constructor
33  AbsParameter();
34 
35  // Copy constructor:
36  AbsParameter(const AbsParameter &);
37 
38  // Destructor
39  virtual ~AbsParameter();
40 
41  // Parameter value
42  virtual double getValue() const=0;
43 
44  // Every parameter must override this:
45  AbsParameter * clone() const;
46 
47  // Extra lingual type information:
48  virtual Parameter *parameter() {return 0;}
49  virtual const Parameter *parameter() const {return 0;}
50 
51  private:
52 
53  // Cannot assign an AbsParameter:
54  AbsParameter & operator= (const AbsParameter &);
55 
56  virtual AbsParameter *_clone() const=0;
57 
58  };
59 
60 // Now for some additional operations:
61 
62 
63 ConstTimesParameter operator * (double c, const AbsParameter &op2);
64 ConstPlusParameter operator + (double c, const AbsParameter &op2);
65 ConstMinusParameter operator - (double c, const AbsParameter &op2);
66 ConstOverParameter operator / (double c, const AbsParameter &op2);
67 
68 ConstTimesParameter operator * (const AbsParameter &op2, double c);
69 ConstPlusParameter operator + (const AbsParameter &op2, double c);
70 ConstPlusParameter operator - (const AbsParameter &op2, double c);
71 ConstTimesParameter operator / (const AbsParameter &op2, double c);
72 
73 
74 ParameterProduct operator * (const AbsParameter &op1, const AbsParameter &op2);
75 ParameterSum operator + (const AbsParameter &op1, const AbsParameter &op2);
76 ParameterDifference operator - (const AbsParameter &op1, const AbsParameter &op2);
77 ParameterQuotient operator / (const AbsParameter &op1, const AbsParameter &op2);
78 ParameterNegation operator - (const AbsParameter &op1);
79 
80 typedef const AbsParameter & GENPARAMETER;
81 
82 } // namespace GeoGenfun
83 
84 // Poor man's covariant return type:
85 #define PARAMETER_OBJECT_DEF(classname) \
86 public: \
87  classname *clone() const; \
88 private: \
89  virtual AbsParameter* _clone() const;
90 
91 // Poor man's covariant return type:
92 #define PARAMETER_OBJECT_IMP(classname) \
93 classname *classname::clone () const { \
94  return (classname *) _clone(); \
95 } \
96 AbsParameter *classname::_clone () const { \
97  return new classname(*this); \
98 }
99 
100 
101 #include "GeoGenericFunctions/ParameterProduct.h"
102 #include "GeoGenericFunctions/ParameterSum.h"
103 #include "GeoGenericFunctions/ParameterDifference.h"
104 #include "GeoGenericFunctions/ParameterQuotient.h"
105 #include "GeoGenericFunctions/ParameterNegation.h"
106 #include "GeoGenericFunctions/ConstPlusParameter.h"
107 #include "GeoGenericFunctions/ConstMinusParameter.h"
108 #include "GeoGenericFunctions/ConstTimesParameter.h"
109 #include "GeoGenericFunctions/ConstOverParameter.h"
110 
111 #endif
Definition: Abs.h:15