]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/configuration/sgconfig/parser.h
Use std::lock_guard instead of STG_LOCKER.
[stg.git] / projects / stargazer / plugins / configuration / sgconfig / parser.h
index 035dae8f76c3c955468a99d848086d16c21110d9..a030b9960eb1a8806a1ae5b151aafca67c8843d7 100644 (file)
  *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
  */
 
  *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
  */
 
-#ifndef PARSER_H
-#define PARSER_H
+#pragma once
 
 #include <string>
 
 #include <string>
+#include <map>
 
 
-class ADMIN;
+namespace STG
+{
+class Admin;
+}
 
 class BASE_PARSER
 {
     public:
 
 class BASE_PARSER
 {
     public:
-        BASE_PARSER(const ADMIN & admin, const std::string & t)
+        struct FACTORY
+        {
+            virtual ~FACTORY() {}
+            virtual BASE_PARSER * create(const STG::Admin & admin) = 0;
+        };
+        typedef std::map<std::string, FACTORY *> REGISTRY;
+
+        BASE_PARSER(const STG::Admin & admin, const std::string & t)
             : m_currAdmin(admin),
               m_depth(0),
               m_tag(t)
             : m_currAdmin(admin),
               m_depth(0),
               m_tag(t)
@@ -46,7 +56,7 @@ class BASE_PARSER
         BASE_PARSER(const BASE_PARSER & rvalue);
         BASE_PARSER & operator=(const BASE_PARSER & rvalue);
 
         BASE_PARSER(const BASE_PARSER & rvalue);
         BASE_PARSER & operator=(const BASE_PARSER & rvalue);
 
-        const ADMIN & m_currAdmin;
+        const STG::Admin & m_currAdmin;
         size_t        m_depth;
         std::string   m_answer;
         std::string   m_tag;
         size_t        m_depth;
         std::string   m_answer;
         std::string   m_tag;
@@ -54,5 +64,3 @@ class BASE_PARSER
     private:
         virtual void CreateAnswer() = 0;
 };
     private:
         virtual void CreateAnswer() = 0;
 };
-
-#endif //PARSER_H