teleport/common/libex/include/ex/ex_ini.h

126 lines
2.7 KiB
C
Raw Normal View History

2020-08-12 15:48:12 +00:00
#ifndef __EX_INI_H__
#define __EX_INI_H__
2016-12-06 17:05:56 +00:00
/*
2020-08-12 15:48:12 +00:00
2016-12-06 17:05:56 +00:00
2020-08-12 15:48:12 +00:00
1. ';' '#'
2.
3.
4. 使GetDumySection()
DumySectionPython
*/
2016-12-06 17:05:56 +00:00
#include "ex_str.h"
#include <map>
typedef std::map<ex_wstr, ex_wstr> ex_ini_kvs;
class ExIniSection
2016-12-06 17:05:56 +00:00
{
public:
ExIniSection();
2016-12-06 17:05:56 +00:00
explicit ExIniSection(const ex_wstr& strSectionName);
2016-12-06 17:05:56 +00:00
~ExIniSection();
2016-12-06 17:05:56 +00:00
void ClearUp();
2016-12-06 17:05:56 +00:00
ex_wstr Name() { return m_strName; }
2016-12-06 17:05:56 +00:00
void GetStr(const ex_wstr& strKey, ex_wstr& strValue, const ex_wstr& strDefault);
2016-12-06 17:05:56 +00:00
bool GetStr(const ex_wstr& strKey, ex_wstr& strValue);
void GetInt(const ex_wstr& strKey, int& iValue, int iDefault);
bool GetInt(const ex_wstr& strKey, int& iValue);
void GetBool(const ex_wstr& strKey, bool& bValue, bool bDefault);
bool GetBool(const ex_wstr& strKey, bool& bValue);
bool SetValue(const ex_wstr& strKey, const ex_wstr& strValue, bool bAddIfNotExists = false);
ex_ini_kvs& GetKeyValues() { return m_kvs; }
int Count() const
{
return (int) m_kvs.size();
}
void Save(FILE* file, int codepage);
2016-12-06 17:05:56 +00:00
#ifdef EX_DEBUG
void Dump(void);
2016-12-06 17:05:56 +00:00
#endif
protected:
bool _IsKeyExists(const ex_wstr& strKey);
2016-12-06 17:05:56 +00:00
private:
ex_wstr m_strName;
ex_ini_kvs m_kvs;
2016-12-06 17:05:56 +00:00
};
typedef std::map<ex_wstr, ExIniSection*> ex_ini_sections;
2016-12-06 17:05:56 +00:00
// Ini file
class ExIniFile
2016-12-06 17:05:56 +00:00
{
public:
enum PARSE_RV
{
PARSE_ERROR,
PARSE_SECTION,
PARSE_KEYVALUE,
PARSE_COMMENT,
PARSE_OTHER
};
2016-12-06 17:05:56 +00:00
public:
ExIniFile();
~ExIniFile();
const ex_wstr& get_filename() { return m_file_path; }
void ClearUp();
2016-12-06 17:05:56 +00:00
// Read and parse special file.
bool LoadFromFile(const ex_wstr& strFileName, bool bClearOld = true);
bool LoadFromMemory(const ex_wstr& strData, bool bClearOld = true);
2016-12-06 17:05:56 +00:00
ex_ini_sections& GetAllSections() { return m_secs; }
2016-12-06 17:05:56 +00:00
ExIniSection* GetSection(const ex_wstr& strName, bool bCreateIfNotExists = false);
ExIniSection* GetDumySection() { return &m_dumy_sec; }
int Count() const
{
return (int) (m_secs.size());
}
void Save(int codepage = EX_CODEPAGE_UTF8);
2016-12-06 17:05:56 +00:00
#ifdef EX_DEBUG
void Dump(void);
2016-12-06 17:05:56 +00:00
#endif
protected:
static PARSE_RV parse_line_(const ex_wstr& strLine, ex_wstr& strKey, ex_wstr& strValue);
bool process_line_(const ex_wstr& strLine, ExIniSection** pCurSection);
2016-12-06 17:05:56 +00:00
private:
ex_ini_sections m_secs;
ExIniSection m_dumy_sec;
ex_wstr m_file_path;
2016-12-06 17:05:56 +00:00
};
#endif // __EX_INI_H__