00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _EYEDB_CONFIG_H
00025 #define _EYEDB_CONFIG_H
00026
00027 #include <map>
00028
00029 namespace eyedb {
00030
00039 class Config {
00040
00041 public:
00042 typedef std::map<std::string, bool> VarMap;
00043
00049 Config(const std::string &name);
00050
00057 Config(const std::string &name, const VarMap &var_map);
00058
00064 Config(const Config &config);
00065
00070 std::string getName() const {return name;}
00071
00072 struct Item {
00073 char *name;
00074 char *value;
00075
00076 Item();
00077 Item(const char *name, const char *value);
00078 Item(const Item &item);
00079 Item& operator=(const Item &item);
00080 ~Item();
00081 };
00082
00088 bool add(const char *file, bool quietFileNotFoundError = false);
00089
00097 void loadConfigFile( const std::string& configFilename, const char* envVariable, const char* defaultFilename);
00098
00104 const char *getValue(const char *name, bool expand_vars = true) const;
00105
00112 void setValue(const char *name, const char *value);
00113
00119 Item *getValues(unsigned int &item_cnt, bool expand_vars = false) const;
00120
00125 static void init();
00126
00131 static void _release();
00132
00133 static bool isBuiltinVar(const char *name);
00134
00135 static bool isUserVar(const char *name);
00136
00137 ~Config();
00138
00139 private:
00140 friend class Object;
00141
00142 Config();
00143 Config& operator=(const Config &config);
00144
00145 VarMap *var_map;
00146
00147 std::string name;
00148
00149 void garbage();
00150
00151 LinkedList list;
00152
00153 friend std::ostream& operator<< (std::ostream&, const Config&);
00154
00155 void checkIsIn(const char *name);
00156 };
00157
00162 std::ostream& operator<< (std::ostream&os, const Config &config);
00163 }
00164
00165 #endif