chiark / gitweb /
pointmap command for use by moebius2
[moebius.git] / parameter.hh
1 /*
2  * Parameters library
3  */
4
5 #ifndef PARAMETER_HH
6 #define PARAMETER_HH
7
8 #include <iostream.h>
9
10 class AnyParameter {
11   AnyParameter *next;
12   static AnyParameter *first;
13 protected:
14   const char *name;
15   const char *description;
16   void printvalue();
17   virtual void rangecheckprint() =0;
18 public:
19   AnyParameter(const char *n, const char *d);
20   virtual void operator ++() =0;
21   virtual void operator --() =0;
22   virtual void operator =(double) =0;
23   static AnyParameter *find(const char *n);
24   static void list();
25   static void help();
26 };
27
28 template<class T> class Parameter : AnyParameter {
29   T value, delta, min, max;
30   void rangecheckprint();
31 public:
32   Parameter(const char *n, const char *d, T i, T de, T mi, T ma);
33   operator T (){ return value; }
34   void operator ++(){ value+= delta; rangecheckprint(); }
35   void operator --(){ value-= delta; rangecheckprint(); }
36   void operator =(double v) { value= (T)v; rangecheckprint(); }
37 };
38
39 template<class T> Parameter<T>::Parameter
40     (const char *n, const char *d, T i, T de, T mi, T ma)
41 : AnyParameter(n,d) {
42   value=i; delta=de; min=mi; max=ma;
43 }
44
45 template<class T> void Parameter<T>::rangecheckprint() {
46   if (value<min) {
47     value= min;  cerr << "underflowed; ";
48   } else if (value>max) {
49     value= max;  cerr << "overflowed; ";
50   }
51   cerr << "set to " << value << "\n";
52 }
53
54 #endif