jdxnumbers.h
1 /***************************************************************************
2  jdxnumbers.h - description
3  -------------------
4  begin : Mon Jul 12 2004
5  copyright : (C) 2000-2014 by Thies H. Jochimsen
6  email : thies@jochimsen.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef JDXNUMBERS_H
19 #define JDXNUMBERS_H
20 
21 
22 #include <odinpara/jdxbase.h>
23 #include <tjutils/tjtypes.h>
24 
25 
30 
31 
36 template<class T>
37 class JDXnumber : public virtual JcampDxClass {
38 
39  public:
40 
44  JDXnumber() {set_defaults();}
45 
57  JDXnumber(T v, const STD_string& name="",bool userParameter=true,
58  compatMode mode=notBroken,parameterMode parameter_mode=edit,
59  const STD_string& parx_equivalent="",
60  float parx_assign_factor=1.0,float parx_assign_offset=0.0);
61 
62 
67 
71  JDXnumber<T>& operator = (T v) {val=v; return *this;}
72 
77 
78  // code to make the number appear like a built-in number
79  operator T () const {return val;}
80  T operator += (T rhsval) {val+=rhsval; return *this;}
81  T operator -= (T rhsval) {val-=rhsval; return *this;}
82  T operator *= (T rhsval) {val*=rhsval; return *this;}
83  T operator /= (T rhsval) {val/=rhsval; return *this;}
84  T operator ++ () {val=val+(T)1; return val;} // prefix
85  T operator ++ (int) {T tmp=val; val=val+(T)1; return tmp;} // postfix
86  T operator -- () {val=val-(T)1; return val;} // prefix
87  T operator -- (int) {T tmp=val; val=val-(T)1; return tmp;} // postfix
88 
93  JDXnumber<T>& set_minmaxval(double min,double max) {minval=min; maxval=max; return *this;}
94 
95  // overwriting virtual functions from JcampDxClass
96  STD_string printvalstring() const;
97  bool parsevalstring (const STD_string& parstring);
98  STD_string get_parx_code(parxCodeType type, const ParxEquiv& equiv) const;
99  ParxEquiv get_parx_equiv() const {return parx_equiv;}
100  double get_minval() const {return minval;}
101  double get_maxval() const {return maxval;}
102  const char* get_typeInfo() const {return TypeTraits::type2label(val);}
103  JcampDxClass* create_copy() const {return new JDXnumber<T>(*this);}
104  T* cast(T*) {return &val;}
105 
106  private:
107 
108  void set_defaults();
109 
110  T val;
111  mutable ParxEquiv parx_equiv;
112  double minval,maxval;
113 };
114 
116 //
117 // Aliases:
118 
123 
128 
133 
138 
139 
143 #endif
144