00001
00002
00003 #ifndef BASE_CONFIG_H
00004 #define BASE_CONFIG_H
00005
00006 #include <map>
00007 #include <vector>
00008 #include "ConfigException.h"
00009 #include "File.h"
00010
00011 namespace base {
00013
00017 class PPBASE_EXPORT Config {
00018 public:
00020 class PPBASE_EXPORT Item {
00021 public:
00023 Item();
00025 Item(const String &data);
00027 Item(const std::vector<String> &data);
00029 void clear();
00031 bool empty() const;
00033 size_t erase(size_t pos, size_t count = 1);
00035 const String &get(size_t pos = 0) const;
00037 const std::vector<String> &getAll() const;
00039 size_t getCount() const;
00041 void set(const String &data, size_t pos = 0);
00043 void setAll(const std::vector<String> &data);
00044
00045 private:
00046 std::vector<String> _data;
00047 };
00048
00050 enum configFlags {
00051 flagNone = 0x00,
00052 flagKeep = 0x01,
00053 flagNeedNotExist = 0x02
00054 };
00055
00061 std::map<String, Item>::iterator begin();
00062
00068 std::map<String, Item>::const_iterator begin() const;
00069
00071 void clear();
00072
00074 void clear(const String &var);
00075
00081 std::map<String, Item>::iterator end();
00082
00088 std::map<String, Item>::const_iterator end() const;
00089
00091 void erase(const String &var);
00092
00094
00098 bool exists(const String &var) const;
00099
00101 static bool fileExists(const String &fname);
00102
00104 static bool fileExistsUser(const String &company, const String &product, const String &id);
00105
00107 const std::vector<String> &getAll(const String &var) const;
00108
00110
00115 bool getBool(const String &var, size_t pos = 0) const;
00116
00118
00124 bool getBool(const String &var, bool defval, size_t pos = 0) const;
00125
00127
00131 size_t getCount(const String &var) const;
00132
00138 const String &getFileName() const;
00139
00141
00146 int getInt(const String &var, size_t pos = 0) const;
00147
00149
00155 int getInt(const String &var, int defval, size_t pos = 0) const;
00156
00158
00163 const String &getString(const String &var, size_t pos = 0) const;
00164
00166
00172 const String &getString(const String &var, const String &defval, size_t pos = 0) const;
00173
00175
00181 std::vector<String> getVectorOfStrings(const String &var, char delim = ',', size_t pos = 0) const;
00182
00184 static String mkFileName(const String &fname);
00185
00187
00195 static String mkFileNameUser(const String &company, const String &product, const String &id);
00196
00198
00202 void read(const String &fname, configFlags flags = flagNone);
00203
00205
00211 void readUser(const String &company, const String &product, const String &id, configFlags flags = flagNone);
00212
00214 void setAll(const String &var, const std::vector<String> &val);
00215
00217 void setBool(const String &var, bool val, size_t pos = 0);
00218
00220 void setInt(const String &var, int val, size_t pos = 0);
00221
00223 void setString(const String &var, const String &val, size_t pos = 0);
00224
00226 void write() const;
00227
00229
00232 void write(const String &fname) const;
00233
00235
00240 void writeUser(const String &company, const String &product, const String &id) const;
00241
00242 private:
00244
00248 std::map<String, Item>::const_iterator get(const String &var) const;
00249
00251 void read(File &file);
00252
00254 void write(File &file) const;
00255
00256 String _filename;
00257 std::map<String, Item> _data;
00258 };
00259 }
00260
00261 #endif