2006-06-15 04:19:30 +00:00
|
|
|
#ifndef _CONFIG_H_
|
|
|
|
#define _CONFIG_H_
|
|
|
|
|
2007-12-06 23:20:08 +00:00
|
|
|
#include <string>
|
2007-12-13 05:47:15 +00:00
|
|
|
#include <boost/thread.hpp>
|
2008-03-19 23:26:24 +00:00
|
|
|
#include <boost/utility.hpp>
|
2008-03-19 15:29:06 +00:00
|
|
|
#include "Singleton.h"
|
|
|
|
#include <map>
|
2006-06-15 04:19:30 +00:00
|
|
|
#include "xml/Node.h"
|
|
|
|
|
2008-03-19 23:26:24 +00:00
|
|
|
class CConfig : public CSingleton<CConfig>, boost::noncopyable
|
2006-06-15 04:19:30 +00:00
|
|
|
{
|
|
|
|
public:
|
2008-03-19 15:29:06 +00:00
|
|
|
friend class CSingleton<CConfig>;
|
2006-06-15 04:19:30 +00:00
|
|
|
|
|
|
|
void RegisterPreferenceInteger(const char*, int);
|
|
|
|
void RegisterPreferenceBoolean(const char*, bool);
|
|
|
|
void RegisterPreferenceString(const char*, const char*);
|
|
|
|
|
|
|
|
int GetPreferenceInteger(const char*);
|
|
|
|
bool GetPreferenceBoolean(const char*);
|
|
|
|
const char* GetPreferenceString(const char*);
|
|
|
|
|
|
|
|
bool SetPreferenceInteger(const char*, int);
|
|
|
|
bool SetPreferenceBoolean(const char*, bool);
|
|
|
|
bool SetPreferenceString(const char*, const char*);
|
|
|
|
|
|
|
|
void Save();
|
|
|
|
|
|
|
|
private:
|
|
|
|
enum PREFERENCE_TYPE
|
|
|
|
{
|
|
|
|
TYPE_INTEGER,
|
|
|
|
TYPE_BOOLEAN,
|
|
|
|
TYPE_STRING,
|
|
|
|
};
|
|
|
|
|
|
|
|
class CPreference
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CPreference(const char*, PREFERENCE_TYPE);
|
|
|
|
virtual ~CPreference();
|
|
|
|
const char* GetName();
|
|
|
|
PREFERENCE_TYPE GetType();
|
|
|
|
const char* GetTypeString();
|
|
|
|
virtual void Serialize(Framework::Xml::CNode*);
|
|
|
|
|
|
|
|
private:
|
2007-12-06 23:20:08 +00:00
|
|
|
std::string m_sName;
|
2006-06-15 04:19:30 +00:00
|
|
|
PREFERENCE_TYPE m_nType;
|
|
|
|
};
|
|
|
|
|
|
|
|
class CPreferenceInteger : public CPreference
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CPreferenceInteger(const char*, int);
|
|
|
|
virtual ~CPreferenceInteger();
|
|
|
|
int GetValue();
|
|
|
|
void SetValue(int);
|
|
|
|
virtual void Serialize(Framework::Xml::CNode*);
|
|
|
|
|
|
|
|
private:
|
|
|
|
int m_nValue;
|
|
|
|
};
|
|
|
|
|
|
|
|
class CPreferenceBoolean : public CPreference
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CPreferenceBoolean(const char*, bool);
|
|
|
|
virtual ~CPreferenceBoolean();
|
|
|
|
bool GetValue();
|
|
|
|
void SetValue(bool);
|
|
|
|
virtual void Serialize(Framework::Xml::CNode*);
|
|
|
|
|
|
|
|
private:
|
|
|
|
bool m_nValue;
|
|
|
|
};
|
|
|
|
|
|
|
|
class CPreferenceString : public CPreference
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CPreferenceString(const char*, const char*);
|
|
|
|
virtual ~CPreferenceString();
|
|
|
|
const char* GetValue();
|
|
|
|
void SetValue(const char*);
|
|
|
|
virtual void Serialize(Framework::Xml::CNode*);
|
|
|
|
|
|
|
|
private:
|
2007-12-06 23:20:08 +00:00
|
|
|
std::string m_sValue;
|
2006-06-15 04:19:30 +00:00
|
|
|
};
|
|
|
|
|
2008-03-19 15:29:06 +00:00
|
|
|
typedef std::map<std::string, CPreference*> PreferenceMapType;
|
|
|
|
|
2006-06-15 04:19:30 +00:00
|
|
|
CConfig();
|
|
|
|
~CConfig();
|
|
|
|
void Load();
|
2007-12-12 03:57:09 +00:00
|
|
|
std::string GetConfigPath() const;
|
2006-06-15 04:19:30 +00:00
|
|
|
template <typename Type> Type* FindPreference(const char*);
|
|
|
|
template <typename Type> Type* CastPreference(CPreference*);
|
|
|
|
void InsertPreference(CPreference*);
|
|
|
|
|
2008-03-19 15:29:06 +00:00
|
|
|
PreferenceMapType m_preferences;
|
2007-12-13 05:47:15 +00:00
|
|
|
boost::mutex m_mutex;
|
2006-06-15 04:19:30 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|