Ice Sheet System Model  4.18
Code documentation
GenericParam.h
Go to the documentation of this file.
1 /*
2  * GenericParam.h
3  *
4  * Created on: Aug 29, 2012
5  * Author: utke
6  */
7 
8 #ifndef GENERICPARAM_H_
9 #define GENERICPARAM_H_
10 
11 /*Headers:*/
12 #ifdef HAVE_CONFIG_H
13  #include <config.h>
14 #else
15 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
16 #endif
17 #include "./Param.h"
18 #include "../../shared/shared.h"
19 
26 template <class P> class GenericParam: public Param{
27 
28  private:
29  P myP;
30  int myEnumVal;
31 
32  public:
33  /*GenericParam constructors, destructors: {{{*/
34  GenericParam(int enumVal) : myEnumVal(enumVal){};
35  GenericParam(P Pin, int enumVal) : myP(Pin),myEnumVal(enumVal){};
37  /*}}}*/
38  /*Object virtual functions definitions:{{{ */
39  // unfortunately, having to implement such a printer method implies
40  // that any structured P must provide the friend << operator
41  Param* copy() { return new GenericParam<P>(*this); };
42  void DeepEcho() {
43  _printf_("GenericParam:\n");
44  _printf_(" enum: " << myEnumVal << " (" << EnumToStringx(myEnumVal) << ")\n");
45  _printf_(" value: " << myP << "\n");;
46  }
47  void Echo() {DeepEcho();};
48  int Id(){ return -1; };
49 
50  // the "copy" has to implement the base class abstract function
51  // but I would prefer to drop this not to hide a "new" in here because
52  // it does not clarify ownership of the newed up instance...
53  // use the default copy constructor instead
54  void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){
55  _printf_(" WARNING: parameter "<<EnumToStringx(this->myEnumVal)<<" is a GenericParam and cannot be marshalled\n");
56  /*Nothing for now*/
57  }
58  int ObjectEnum() {return GenericParamEnum;};
59 
60  /*}}}*/
61  /*Param vritual function definitions: {{{*/
62  P& GetParameterValue() { return myP;}
63  const P& GetParameterValue()const { return myP;};
64  int InstanceEnum(){return myEnumVal;}
65 
66  // none of these apply ...
67  void GetParameterValue(bool* pbool){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a bool");}
68  void GetParameterValue(int* pinteger){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return an integer");}
69  void GetParameterValue(int** pintarray,int* pM){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return an array of integers");}
70  void GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return an array of integers");}
71  void GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a IssmDouble");}
72  void GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a IssmDouble for a given time");}
73  void GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a string");}
74  void GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a string array");}
75  void GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a IssmDouble array");}
76  void GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, int* pN){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a IssmDouble array");}
77  void GetParameterValue(IssmDouble*** parray, int* pM,int** pmdims, int** pndims){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a matrix array");}
78  void GetParameterValue(Vector<IssmDouble>** pvec){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a Vec");}
79  void GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a Mat");}
80  void GetParameterValue(FILE** pfid){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a FILE");}
81  void GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a DataSet");}
82 
83  void SetEnum(int enum_in){this->myEnumVal = enum_in;};
84  void SetValue(bool boolean){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold a bool");}
85  void SetValue(int integer){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold an integer");}
86  void SetValue(int* intarray,int M){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold an int array");}
87  void SetValue(int* intarray,int M,int N){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold an int array");}
88  void SetValue(IssmDouble scalar){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold an IssmDouble");}
89  void SetValue(char* string){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold a string");}
90  void SetValue(char** stringarray,int M){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold a string array");}
91  void SetValue(IssmDouble* IssmDoublearray,int M){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold a IssmDouble array");}
92  void SetValue(IssmDouble* pIssmDoublearray,int M,int N){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold a IssmDouble array");}
93  void SetValue(Vector<IssmDouble>* vec){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold a Vec");}
94  void SetValue(Matrix<IssmDouble>* mat){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold a Mat");}
95  void SetValue(FILE* fid){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold a FILE");}
96  void SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold an array of matrices");}
97 
98  /*}}}*/
99 };
100 
101 #endif /* GENERICPARAM_H_ */
Matrix< IssmDouble >
IssmDouble
double IssmDouble
Definition: types.h:37
Param
Definition: Param.h:21
GenericParam::GetParameterValue
void GetParameterValue(FILE **pfid)
Definition: GenericParam.h:80
GenericParam::SetValue
void SetValue(char **stringarray, int M)
Definition: GenericParam.h:90
GenericParam::GetParameterValue
void GetParameterValue(Vector< IssmDouble > **pvec)
Definition: GenericParam.h:78
_printf_
#define _printf_(StreamArgs)
Definition: Print.h:22
GenericParam::GetParameterValue
void GetParameterValue(bool *pbool)
Definition: GenericParam.h:67
GenericParam::SetValue
void SetValue(int integer)
Definition: GenericParam.h:85
GenericParam::InstanceEnum
int InstanceEnum()
Definition: GenericParam.h:64
GenericParam::ObjectEnum
int ObjectEnum()
Definition: GenericParam.h:58
GenericParam::GetParameterValue
void GetParameterValue(IssmDouble **pIssmDoublearray, int *pM, int *pN)
Definition: GenericParam.h:76
GenericParam::DeepEcho
void DeepEcho()
Definition: GenericParam.h:42
GenericParam::SetValue
void SetValue(IssmDouble *pIssmDoublearray, int M, int N)
Definition: GenericParam.h:92
GenericParam::GetParameterValue
void GetParameterValue(IssmDouble ***parray, int *pM, int **pmdims, int **pndims)
Definition: GenericParam.h:77
GenericParam::GetParameterValue
void GetParameterValue(int **pintarray, int *pM, int *pN)
Definition: GenericParam.h:70
GenericParam::SetValue
void SetValue(char *string)
Definition: GenericParam.h:89
GenericParam::GetParameterValue
P & GetParameterValue()
Definition: GenericParam.h:62
GenericParam::Marshall
void Marshall(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
Definition: GenericParam.h:54
EnumToStringx
const char * EnumToStringx(int enum_in)
Definition: EnumToStringx.cpp:15
GenericParam::SetValue
void SetValue(FILE *fid)
Definition: GenericParam.h:95
GenericParam::GetParameterValue
void GetParameterValue(IssmDouble **pIssmDoublearray, int *pM)
Definition: GenericParam.h:75
Param.h
abstract class for Param object
GenericParam::GetParameterValue
void GetParameterValue(int **pintarray, int *pM)
Definition: GenericParam.h:69
GenericParam::SetValue
void SetValue(IssmDouble scalar)
Definition: GenericParam.h:88
GenericParam::copy
Param * copy()
Definition: GenericParam.h:41
GenericParam::GetParameterValue
void GetParameterValue(Matrix< IssmDouble > **pmat)
Definition: GenericParam.h:79
GenericParam::GetParameterValue
void GetParameterValue(IssmDouble *pdouble, IssmDouble time)
Definition: GenericParam.h:72
GenericParam::GetParameterValue
void GetParameterValue(IssmDouble *pIssmDouble)
Definition: GenericParam.h:71
GenericParam::SetEnum
void SetEnum(int enum_in)
Definition: GenericParam.h:83
GenericParam::myP
P myP
Definition: GenericParam.h:29
GenericParam::GetParameterValue
void GetParameterValue(char ***pstringarray, int *pM)
Definition: GenericParam.h:74
GenericParam::SetValue
void SetValue(IssmDouble *IssmDoublearray, int M)
Definition: GenericParam.h:91
GenericParam::GetParameterValue
void GetParameterValue(char **pstring)
Definition: GenericParam.h:73
GenericParam::~GenericParam
~GenericParam()
Definition: GenericParam.h:36
GenericParam::SetValue
void SetValue(int *intarray, int M)
Definition: GenericParam.h:86
GenericParam::SetValue
void SetValue(Vector< IssmDouble > *vec)
Definition: GenericParam.h:93
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
GenericParam::SetValue
void SetValue(Matrix< IssmDouble > *mat)
Definition: GenericParam.h:94
GenericParam::GetParameterValue
void GetParameterValue(int *pinteger)
Definition: GenericParam.h:68
GenericParamEnum
@ GenericParamEnum
Definition: EnumDefinitions.h:1083
GenericParam::GenericParam
GenericParam(int enumVal)
Definition: GenericParam.h:34
GenericParam::GetParameterValue
const P & GetParameterValue() const
Definition: GenericParam.h:63
GenericParam::Echo
void Echo()
Definition: GenericParam.h:47
GenericParam::myEnumVal
int myEnumVal
Definition: GenericParam.h:30
GenericParam::GetParameterValue
void GetParameterValue(DataSet **pdataset)
Definition: GenericParam.h:81
GenericParam::SetValue
void SetValue(bool boolean)
Definition: GenericParam.h:84
DataSet
Declaration of DataSet class.
Definition: DataSet.h:14
GenericParam::SetValue
void SetValue(IssmDouble **array, int M, int *mdim_array, int *ndim_array)
Definition: GenericParam.h:96
Vector< IssmDouble >
GenericParam::Id
int Id()
Definition: GenericParam.h:48
GenericParam::SetValue
void SetValue(int *intarray, int M, int N)
Definition: GenericParam.h:87
GenericParam
Definition: GenericParam.h:26
GenericParam::GenericParam
GenericParam(P Pin, int enumVal)
Definition: GenericParam.h:35