Skeleton of application, at least compiles
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
#ifndef FELIX_THE_CAT_FSYSTEM_CONFIGPARSER_HEADER_FILE_INCLUDED_KHKLJWGNBBVKJGLKXBVMZVEKLEKFJKJSAGSKAJGHJKBHQRPOTU
|
||||
#define FELIX_THE_CAT_FSYSTEM_CONFIGPARSER_HEADER_FILE_INCLUDED_KHKLJWGNBBVKJGLKXBVMZVEKLEKFJKJSAGSKAJGHJKBHQRPOTU
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <set>
|
||||
|
||||
using namespace std;
|
||||
|
||||
const char CONFIGVALUETYPESTRING = 0;
|
||||
const char CONFIGVALUETYPESET = 1;
|
||||
|
||||
class ConfigValue;
|
||||
|
||||
// Класс описывающий параметр из конфигурационного файла
|
||||
class ConfigParam
|
||||
{
|
||||
public:
|
||||
string name;
|
||||
vector<ConfigValue> val;
|
||||
// возвращает первое значение параметра (если их несколько)
|
||||
string GetSingleVal() const;
|
||||
// создаем из строки
|
||||
ConfigParam(string name);
|
||||
// создаем просто так
|
||||
ConfigParam();
|
||||
// создаем параметр с единственным значением
|
||||
ConfigParam(string name, string value);
|
||||
};
|
||||
|
||||
bool operator<(const ConfigParam &a, const ConfigParam &b);
|
||||
|
||||
|
||||
// Класс, описывающий значение параметра в конфигурационном файле
|
||||
class ConfigValue
|
||||
{
|
||||
public:
|
||||
char type;
|
||||
string sval;
|
||||
set<ConfigParam> pval;
|
||||
string GetParamVal(string pname) const;
|
||||
};
|
||||
|
||||
// Класс, разбирающий конфигурационный файл
|
||||
class ConfigParser
|
||||
{
|
||||
private:
|
||||
char *s;
|
||||
int slen;
|
||||
int mode;
|
||||
int cline;
|
||||
// переделывает число в строку
|
||||
string i2s(int a);
|
||||
// разбирает s с l по r, считая, что она должна быть ConfigValue - ом
|
||||
void ParseConfigValue(int &l, int &r, ConfigValue &vl);
|
||||
// возвращает, является ли символ whitespace-ом
|
||||
bool IsWS(char c);
|
||||
// возвращает, может ли такой символ быть в имени параметра
|
||||
bool GoodForName(char c);
|
||||
// убирает двойные кавычки в начале/конце строки (если, конечно, таковые имеются)
|
||||
void TrimQuotes(string &s);
|
||||
// возвращает символ, соответствующий escape-последовательности "\c"
|
||||
char UnSlash(char c);
|
||||
// разбирает s с l по r, считая, что она должна быть ConfigParam - ом
|
||||
// возвращает, какая операция была применена
|
||||
int ParseConfigParam(int &l, int &r, ConfigParam &p);
|
||||
// возращает, считается ли такой символ разделителем
|
||||
// разделителями считаются ws-ы, скобки и запятые
|
||||
bool IsDelim(char c);
|
||||
// Разбирает несколько ConfigValues, заданных через запятую
|
||||
void ParseConfigParamValues(int &l, int &r, ConfigParam &b);
|
||||
void TrimSpaces(string &s);
|
||||
public:
|
||||
ConfigValue cfg;
|
||||
// загружает конфигурационный файл
|
||||
void Load(string fname);
|
||||
// возвращает значение параметра (в старом стиле)
|
||||
// генерирует исключение, если такого нет
|
||||
string GetParam(string name);
|
||||
// возвращает значение параметра (в старом стиле)
|
||||
// возвращает пустую строку, если такого нет
|
||||
string GetParamSilent(string name);
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user