12 static AnyParameter *first;
15 const char *description;
17 virtual void rangecheckprint() =0;
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);
28 template<class T> class Parameter : AnyParameter {
29 T value, delta, min, max;
30 void rangecheckprint();
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(); }
39 template<class T> Parameter<T>::Parameter
40 (const char *n, const char *d, T i, T de, T mi, T ma)
42 value=i; delta=de; min=mi; max=ma;
45 template<class T> void Parameter<T>::rangecheckprint() {
47 value= min; cerr << "underflowed; ";
48 } else if (value>max) {
49 value= max; cerr << "overflowed; ";
51 cerr << "set to " << value << "\n";