comparison anagram/agcore/configparam.h @ 0:13d2b8934445

Import AnaGram (near-)release tree into Mercurial.
author David A. Holland
date Sat, 22 Dec 2007 17:52:45 -0500
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:13d2b8934445
1 /*
2 * AnaGram, A System for Syntax Directed Programming
3 * Copyright 1993-2002 Parsifal Software. All Rights Reserved.
4 * See the file COPYING for license and usage terms.
5 *
6 * configparam.h - configuration parameter mechanism
7 */
8
9 #ifndef CONFIGPARAM_H
10 #define CONFIGPARAM_H
11
12 class ConfigParam {
13 public:
14
15 class ErrorHandler {
16 public:
17 ErrorHandler() {}
18 virtual ~ErrorHandler() {}
19 virtual void badParam(const char *) = 0;
20 };
21
22 const char *name;
23
24 ConfigParam(const char *n);
25 virtual ~ConfigParam() {}
26
27 virtual void setIntegerValue(const int, ErrorHandler &);
28 virtual void setStringValue(const AgString, ErrorHandler &);
29 virtual void init() {}
30 virtual void reset() = 0;
31 virtual AgString asString() = 0;
32
33 static ConfigParam *table[];
34 static int paramCount;
35
36 static void initAll();
37 static void resetAll();
38 static void set(int, ErrorHandler &);
39 static void set(ErrorHandler &);
40 };
41
42 template <class T>
43 class Param : public ConfigParam {
44 protected:
45 T &parameter;
46 T defaultValue;
47 public:
48 Param(const char *, T &);
49 virtual void init();
50 void reset();
51 };
52
53 template <class T>
54 void Param<T>::init() {
55 defaultValue = parameter;
56 }
57
58 template <class T>
59 Param<T>::Param(const char *n, T &p)
60 : ConfigParam(n), parameter(p), defaultValue(p)
61 {}
62
63 template <class T>
64 void Param<T>::reset() {
65 parameter = defaultValue;
66 }
67
68 class IntegerParam : public Param<int> {
69 public:
70 IntegerParam(const char *n, int &p) : Param<int>(n, p) {}
71 virtual void setIntegerValue(const int, ErrorHandler &);
72 virtual AgString asString();
73 };
74
75 class StringParam : public Param<AgString> {
76 public:
77 StringParam(const char *n, AgString &p) : Param<AgString>(n, p) {}
78 virtual void setStringValue(const AgString, ErrorHandler &);
79 virtual AgString asString();
80 };
81
82 class ConfigSwitch : public Param<int> {
83 public:
84 ConfigSwitch(const char *n, int &p) : Param<int>(n, p) {}
85 virtual void setIntegerValue(const int, ErrorHandler &);
86 virtual void setStringValue(const AgString, ErrorHandler &);
87 virtual AgString asString();
88 };
89
90 class TextParam : public Param<AgString> {
91 public:
92 TextParam(const char *n, AgString &p) : Param<AgString>(n, p) {}
93 virtual void setStringValue(const AgString, ErrorHandler &);
94 virtual AgString asString();
95 };
96
97 class CastParam : public Param<int> {
98 public:
99 CastParam(const char *, int &);
100 virtual void setStringValue(const AgString, ErrorHandler &e);
101 virtual AgString asString();
102 };
103
104 class TokenParam : public Param<int> {
105 public:
106 TokenParam(const char *, int &);
107 virtual void setStringValue(const AgString, ErrorHandler &e);
108 virtual AgString asString();
109 };
110
111 #endif /* CONFIGPARAM_H */