12 static AnyParameter *first;
15 const char *description;
16 virtual void rangecheck() =0;
18 AnyParameter(const char *n, const char *d);
19 virtual void operator ++() =0;
20 virtual void operator --() =0;
21 virtual void operator =(double) =0;
22 static AnyParameter *find(const char *n);
26 template<class T> class Parameter : AnyParameter {
27 T value, delta, min, max;
30 Parameter(const char *n, const char *d, T i, T de, T mi, T ma);
31 operator T (){ return value; }
32 void operator ++(){ value+= delta; rangecheck(); }
33 void operator --(){ value-= delta; rangecheck(); }
34 void operator =(double v) { value= (T)v; rangecheck(); }
37 template<class T> Parameter<T>::Parameter
38 (const char *n, const char *d, T i, T de, T mi, T ma)
40 value=i; delta=de; min=mi; max=ma;
43 template<class T> void Parameter<T>::rangecheck() {
46 value= min; cerr << "underflowed; ";
47 } else if (value>max) {
48 value= max; cerr << "overflowed; ";
50 cerr << "set to " << value << "\n";