00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _pconfig_h_
00021 #define _pconfig_h_
00022
00023 #include <pclasses/pexport.h>
00024 #include <string>
00025 #include <map>
00026
00027 namespace P {
00028
00029 class ConfigStore;
00030
00032 class PCORE_EXPORT Config {
00033 public:
00034
00036
00039 Config(ConfigStore& store);
00040 ~Config();
00041
00043 void reload();
00044
00046 void save();
00047
00049 class PCORE_EXPORT Key {
00050 friend class Config;
00051
00052 public:
00053 typedef std::multimap<std::string, std::string> value_map;
00054 typedef value_map::const_iterator value_iterator;
00055
00056 typedef std::multimap<std::string, Key*> key_map;
00057 typedef key_map::const_iterator key_iterator;
00058
00060 const std::string& value(const std::string& name, const std::string& def);
00061
00063 void setValue(const std::string& name, const std::string& value);
00064
00065
00066 void removeValue(const std::string& name);
00067
00069 Key* key(const std::string& name);
00070
00072 Key* addKey(const std::string& name);
00073
00075 void removeKey(const std::string& name);
00076
00077 inline const value_map& values() const
00078 { return m_values; }
00079
00080 inline const key_map& keys() const
00081 { return m_keys; }
00082
00083 protected:
00084 Key(Config* cfg, const std::string& name);
00085 ~Key();
00086
00087 private:
00088 Key(const Key&);
00089 Key& operator=(const Key&);
00090
00091 Config* m_cfg;
00092 std::string m_name;
00093 value_map m_values;
00094 key_map m_keys;
00095 };
00096
00097 friend class Key;
00098
00100 inline Key& root()
00101 { return m_root; }
00102
00104 inline ConfigStore& store()
00105 { return m_store; }
00106
00108 inline bool isModified() const
00109 { return m_modified; }
00110
00111 private:
00112 Config(const Config&);
00113 Config& operator=(const Config&);
00114
00115 bool m_modified;
00116 ConfigStore& m_store;
00117 Key m_root;
00118 };
00119
00120 }
00121
00122 #endif