Config.h

00001 // $Id: Config.h 21 2010-09-05 04:18:17Z cschwarz1 $
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