]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/sgconfig/parser.h
Split sgconfig parsers into seaparate files.
[stg.git] / projects / stargazer / plugins / configuration / sgconfig / parser.h
1 /*
2  *    This program is free software; you can redistribute it and/or modify
3  *    it under the terms of the GNU General Public License as published by
4  *    the Free Software Foundation; either version 2 of the License, or
5  *    (at your option) any later version.
6  *
7  *    This program is distributed in the hope that it will be useful,
8  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
9  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  *    GNU General Public License for more details.
11  *
12  *    You should have received a copy of the GNU General Public License
13  *    along with this program; if not, write to the Free Software
14  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15  */
16
17 /*
18  *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
19  */
20
21 #ifndef PARSER_H
22 #define PARSER_H
23
24 #include "stg/message.h"
25 #include "stg/tariff_conf.h"
26 #include "stg/resetable.h"
27 #include "stg/const.h"
28
29 #include <string>
30 #include <vector>
31
32 class TARIFFS;
33 class SETTINGS;
34 class STORE;
35 class ADMINS;
36 class ADMIN;
37 class USERS;
38 class USER;
39 class USER_STAT_RES;
40 class USER_CONF_RES;
41
42 //-----------------------------------------------------------------------------
43 class BASE_PARSER {
44 public:
45     BASE_PARSER(const ADMIN & admin, const std::string & t)
46         : strError(),
47           admins(NULL),
48           users(NULL),
49           tariffs(NULL),
50           store(NULL),
51           settings(NULL),
52           currAdmin(admin),
53           depth(0),
54           tag(t)
55     {}
56     virtual ~BASE_PARSER() {}
57     virtual int Start(void *data, const char *el, const char **attr);
58     virtual int End(void *data, const char *el);
59
60     virtual void Reset() { answer.clear(); depth = 0; }
61
62     void SetUsers(USERS * u) { users = u; }
63     void SetAdmins(ADMINS * a) { admins = a; }
64     void SetTariffs(TARIFFS * t) { tariffs = t; }
65     void SetStore(STORE * s) { store = s; }
66     void SetStgSettings(const SETTINGS * s) { settings = s; }
67
68     const std::string & GetStrError() const { return strError; }
69     const std::string & GetAnswer() const { return answer; }
70     const std::string & GetTag() const { return tag; }
71     std::string GetOpenTag() const { return "<" + tag + ">"; }
72     std::string GetCloseTag() const { return "</" + tag + ">"; }
73
74 protected:
75     BASE_PARSER(const BASE_PARSER & rvalue);
76     BASE_PARSER & operator=(const BASE_PARSER & rvalue);
77
78     std::string      strError;
79     ADMINS *         admins;
80     USERS *          users;
81     TARIFFS *        tariffs;
82     STORE *          store;
83     const SETTINGS * settings;
84     const ADMIN &    currAdmin;
85     int              depth;
86     std::string      answer;
87     std::string      tag;
88
89 private:
90     virtual void CreateAnswer() = 0;
91 };
92 //-----------------------------------------------------------------------------
93 //-----------------------------------------------------------------------------
94 #endif //PARSER_H