00001
00002
00003
00004
00005
00006
00007
00008 #ifndef CFG_CONFIG_H
00009 #define CFG_CONFIG_H
00010 #include <map>
00011 #include <string>
00012
00013 namespace cfg {
00014 class Param;
00016
00028 class Config {
00029 public:
00030
00031 const char* GetName() const;
00032 const char* GetVersion() const;
00033 const char* GetSource() const;
00034 const Param& operator()(const char* pname) const;
00035 const Param& operator()(const std::string& pname) const;
00036 bool IsEditable() const;
00037
00038 public:
00042 Config(const char* name,
00043 const char* version,
00044 const char* source);
00045 ~Config();
00046
00047 void AdoptParam(Param* p);
00048 void RemoveParam(const char* which = "*");
00049 Param& Par(const char* pname);
00050 Param& Par(const std::string& pname);
00051
00052 bool EditOK() const;
00053 void SetReadOnly(int flag=1);
00054 void SetSource(const char* filename);
00055
00056 static void SetEditAllOK();
00057 static void Copy(Config& dest,
00058 const Config& src,
00059 const char* destVersion=0,
00060 const char* destSource =0);
00061 public:
00062 typedef std::map<std::string, Param*> ParamMap;
00063 ParamMap& ParMap() { return fParam; }
00064
00065 private:
00066 bool fEditable;
00067 std::string fName;
00068 std::string fVersion;
00069 std::string fSource;
00070 mutable ParamMap fParam;
00071 };
00072 }
00073 #endif // CFGCONFIG_H
00074