Mercurial > ~dholland > hg > ag > index.cgi
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/anagram/agcore/configparam.h Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,111 @@ +/* + * AnaGram, A System for Syntax Directed Programming + * Copyright 1993-2002 Parsifal Software. All Rights Reserved. + * See the file COPYING for license and usage terms. + * + * configparam.h - configuration parameter mechanism + */ + +#ifndef CONFIGPARAM_H +#define CONFIGPARAM_H + +class ConfigParam { +public: + + class ErrorHandler { + public: + ErrorHandler() {} + virtual ~ErrorHandler() {} + virtual void badParam(const char *) = 0; + }; + + const char *name; + + ConfigParam(const char *n); + virtual ~ConfigParam() {} + + virtual void setIntegerValue(const int, ErrorHandler &); + virtual void setStringValue(const AgString, ErrorHandler &); + virtual void init() {} + virtual void reset() = 0; + virtual AgString asString() = 0; + + static ConfigParam *table[]; + static int paramCount; + + static void initAll(); + static void resetAll(); + static void set(int, ErrorHandler &); + static void set(ErrorHandler &); +}; + +template <class T> +class Param : public ConfigParam { +protected: + T ¶meter; + T defaultValue; +public: + Param(const char *, T &); + virtual void init(); + void reset(); +}; + +template <class T> +void Param<T>::init() { + defaultValue = parameter; +} + +template <class T> +Param<T>::Param(const char *n, T &p) + : ConfigParam(n), parameter(p), defaultValue(p) +{} + +template <class T> +void Param<T>::reset() { + parameter = defaultValue; +} + +class IntegerParam : public Param<int> { +public: + IntegerParam(const char *n, int &p) : Param<int>(n, p) {} + virtual void setIntegerValue(const int, ErrorHandler &); + virtual AgString asString(); +}; + +class StringParam : public Param<AgString> { +public: + StringParam(const char *n, AgString &p) : Param<AgString>(n, p) {} + virtual void setStringValue(const AgString, ErrorHandler &); + virtual AgString asString(); +}; + +class ConfigSwitch : public Param<int> { +public: + ConfigSwitch(const char *n, int &p) : Param<int>(n, p) {} + virtual void setIntegerValue(const int, ErrorHandler &); + virtual void setStringValue(const AgString, ErrorHandler &); + virtual AgString asString(); +}; + +class TextParam : public Param<AgString> { +public: + TextParam(const char *n, AgString &p) : Param<AgString>(n, p) {} + virtual void setStringValue(const AgString, ErrorHandler &); + virtual AgString asString(); +}; + +class CastParam : public Param<int> { +public: + CastParam(const char *, int &); + virtual void setStringValue(const AgString, ErrorHandler &e); + virtual AgString asString(); +}; + +class TokenParam : public Param<int> { +public: + TokenParam(const char *, int &); + virtual void setStringValue(const AgString, ErrorHandler &e); + virtual AgString asString(); +}; + +#endif /* CONFIGPARAM_H */