]> git.stg.codes - stg.git/blobdiff - projects/sgconf/action.h
Enable some more libs.
[stg.git] / projects / sgconf / action.h
index 64d7c1e83e01ed6aceb653bde460c4157d182422..bd3555ed6125b3466be44943cd4375386d7bd813 100644 (file)
  *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
  */
 
-#ifndef __STG_SGCONF_ACTION_H__
-#define __STG_SGCONF_ACTION_H__
+#pragma once
 
 #include <string>
+#include <map>
 #include <stdexcept>
 
 namespace SGCONF
@@ -29,33 +29,24 @@ namespace SGCONF
 
 class OPTION_BLOCK;
 struct PARSER_STATE;
+struct CONFIG;
 
 class ACTION
 {
     public:
         virtual ~ACTION() {}
 
-        virtual ACTION * Clone() const = 0;
         virtual std::string ParamDescription() const = 0;
         virtual std::string DefaultDescription() const = 0;
         virtual OPTION_BLOCK & Suboptions() = 0;
-        virtual PARSER_STATE Parse(int argc, char ** argv) = 0;
+        virtual PARSER_STATE Parse(int argc, char ** argv, void * data = NULL) = 0;
+        virtual void ParseValue(const std::string &) {}
 
-        class ERROR : public std::runtime_error
+        struct ERROR : std::runtime_error
         {
-            public:
-                ERROR(const std::string & message)
-                    : std::runtime_error(message.c_str()) {}
+            explicit ERROR(const std::string & message)
+                : std::runtime_error(message.c_str()) {}
         };
 };
 
-template <typename T>
-class ACTION_CLONE_MIXIN : public ACTION
-{
-    public:
-        virtual ACTION * Clone() const { return new T(*this); }
-};
-
 } // namespace SGCONF
-
-#endif