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 &parameter;
+  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 */