O P A R - Open Architecture Particle in Cell Simulation - Version 3.0
Plasma simulations with dust particles
 All Classes Files Functions Variables Friends Macros Groups Pages
parameter.h
Go to the documentation of this file.
1 
6 #ifndef PARAMETER_H
7 #define PARAMETER_H
8 #include <map>
9 #include <string>
10 #include "task.h"
11 //---------------------------------------------------------------------------------------------------------------------
12 class Parameter;
14 typedef std::map<std::string,WParameter> PARAMETERMAP;
15 
21 class Parameter {
22  public:
24  Parameter () {};
26  virtual ~Parameter () {};
27 
32 
33  virtual std::string Rebuild (std::istream& in) = 0;
35  friend bool operator< (const Parameter& left, const Parameter& right) {return true; };
36 };
37 
42 template<class TYPE>
43 class ParameterValue : public Parameter {
44  private:
46  TYPE* pValue;
48  TYPE Default;
49  public:
51  ParameterValue (TYPE* _pValue, TYPE _Default) : pValue(_pValue) {SetDefault(_Default);};
53  virtual ~ParameterValue () {};
55  void SetDefault (TYPE _Default) {
56  Default = _Default;
57  *pValue = Default;
58  };
60  virtual std::string Rebuild (std::istream& in);
61 };
62 template<class TYPE>
63 std::string ParameterValue<TYPE>::Rebuild (std::istream& in) {
64  in >> *pValue;
65  std::string strToken;
66  in >> strToken;
67  return strToken;
68 }
69 
76 template<class TYPE>
77 class ParameterTask_BASE : public Parameter {
78  protected:
81  public:
83  ParameterTask_BASE (Task* _pParent) : pParent(_pParent) {}
85  virtual ~ParameterTask_BASE () {}
86 
90  virtual std::string Rebuild (std::istream& in);
92  virtual TYPE* New ()=0;
93 };
94 
95 template<class TYPE>
96  std::string ParameterTask_BASE<TYPE>::Rebuild (std::istream& in) {
97  // Insert in the list of sub task of parent tasks
98  TYPE *pTask = New();
99  pParent->AttachTask(pTask);
100  // Rebuild task from file
101  std::string strToken;
102  in >> strToken;
103  if ((strToken != "{") || in.eof()) return strToken;
104  return pTask->Rebuild(in);
105 }
106 
111 template<class TYPE>
112 class ParameterTask : public ParameterTask_BASE<TYPE> {
113  public:
115  ParameterTask (Task* _pParent) : ParameterTask_BASE<TYPE>(_pParent) {}
117  virtual ~ParameterTask () {}
119  virtual TYPE* New () { return new TYPE(); }
120 };
121 
126 template<class TYPE, class OBJECT>
127 class DiagnosticTask : public ParameterTask_BASE<TYPE> {
128  private:
130  OBJECT* pDiagObj;
131  public:
133  DiagnosticTask (Task* _pParent, OBJECT * _pDiagObj) :
134  ParameterTask_BASE<TYPE>(_pParent), pDiagObj(_pDiagObj) {};
136  virtual ~DiagnosticTask () {};
137 
141  virtual TYPE* New () {return new TYPE(pDiagObj);};
142 };
143 #endif // PARAMETER_H