Mercurial > ~dholland > hg > ag > index.cgi
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 ¶meter; | |
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 */ |