00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00035 #ifndef BLOCXX_ENVVARS_HPP__
00036 #define BLOCXX_ENVVARS_HPP__
00037
00038 #include "blocxx/BLOCXX_config.h"
00039 #include "blocxx/Map.hpp"
00040 #include "blocxx/String.hpp"
00041
00042 namespace BLOCXX_NAMESPACE
00043 {
00044
00048 class BLOCXX_COMMON_API EnvVars
00049 {
00050 public:
00051 typedef Map<String, String> EnvMap;
00052 typedef EnvMap::const_iterator const_iterator;
00053
00054 enum EEnvVarFlag
00055 {
00056 E_CURRENT_ENVIRONMENT,
00057 E_EMPTY_ENVIRONMENT
00058 };
00059
00064 EnvVars(EEnvVarFlag flag=E_EMPTY_ENVIRONMENT);
00065
00082 template <class InputIterator>
00083 EnvVars(EEnvVarFlag flag, InputIterator first, InputIterator last);
00084
00092 EnvVars(const char* const envp[]);
00097 EnvVars(const EnvVars& arg);
00101 ~EnvVars();
00108 EnvVars& operator= (const EnvVars& arg);
00116 const char* const* getenvp() const;
00121 size_t size() const
00122 {
00123 return m_envMap.size();
00124 }
00134 String getValue(const String& key, const String& notFoundRetVal=String()) const;
00135
00141 bool removeVar(const String& key);
00142
00150 bool setVar(const String& keyValue);
00151
00159 bool setVar(const String& key, const String& value);
00160
00166 bool addVar(const String& name, const String& value);
00167
00172 bool updateVar(const String& name, const String& value);
00173
00178 const_iterator begin() const
00179 {
00180 return m_envMap.begin();
00181 }
00182
00187 const_iterator end() const
00188 {
00189 return m_envMap.end();
00190 }
00191
00192 private:
00193 void deleteEnvp() const;
00194 static void fillEnvMap(EnvMap& envMap);
00195 static void fillEnvMap(const char* const envp[], EnvMap& envMap);
00196
00197 EnvMap m_envMap;
00198 mutable char** m_envp;
00199 };
00200
00201 template <class InputIterator>
00202 inline EnvVars::EnvVars(EnvVars::EEnvVarFlag flag,
00203 InputIterator first, InputIterator last)
00204 : m_envMap()
00205 , m_envp(0)
00206 {
00207 if( flag == E_CURRENT_ENVIRONMENT)
00208 {
00209 fillEnvMap(m_envMap);
00210 }
00211 for( ; first != last; ++first)
00212 {
00213 setVar(first->first.c_str(), first->second.c_str());
00214 }
00215 }
00216
00217 }
00218
00219 #endif // BLOCXX_ENVVARS_HPP__