Files
defrost_v2/configparser.h
T

86 lines
3.4 KiB
C++

#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