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 #include "blocxx/Cstr.hpp"
00042
00043 namespace BLOCXX_NAMESPACE
00044 {
00045
00049 class BLOCXX_COMMON_API EnvVars
00050 {
00051 public:
00052 typedef Map<String, String> EnvMap;
00053 typedef EnvMap::const_iterator const_iterator;
00054
00055 enum EEnvVarFlag
00056 {
00057 E_CURRENT_ENVIRONMENT,
00058 E_EMPTY_ENVIRONMENT
00059 };
00060
00065 EnvVars(EEnvVarFlag flag=E_EMPTY_ENVIRONMENT);
00082 template <class InputIterator>
00083 inline EnvVars(EEnvVarFlag flag,
00084 InputIterator first, InputIterator last)
00085 : m_envMap()
00086 , m_envp(0)
00087 {
00088 if( flag == E_CURRENT_ENVIRONMENT)
00089 fillEnvMap(m_envMap);
00090 for( ; first != last; ++first)
00091 setVar(first->first.c_str(), first->second.c_str());
00092 }
00101 EnvVars(const char* const envp[]);
00106 EnvVars(const EnvVars& arg);
00110 ~EnvVars();
00117 EnvVars& operator= (const EnvVars& arg);
00127 const char* const* getenvp() const;
00132 size_t size() const
00133 {
00134 return m_envMap.size();
00135 }
00146 String getValue(const String& key, const String& notFoundRetVal=String()) const;
00147
00153 bool removeVar(const String& key);
00154
00162 bool setVar(const String& keyValue);
00163
00171 bool setVar(const String& key, const String& value);
00172
00178 bool addVar(const String& name, const String& value);
00179
00184 bool updateVar(const String& name, const String& value);
00185
00190 const_iterator begin() const
00191 {
00192 return m_envMap.begin();
00193 }
00194
00199 const_iterator end() const
00200 {
00201 return m_envMap.end();
00202 }
00203
00204 private:
00205 void deleteEnvp() const;
00206 static void fillEnvMap(EnvMap& envMap);
00207 static void fillEnvMap(const char* const envp[], EnvMap& envMap);
00208
00209 EnvMap m_envMap;
00210 mutable char** m_envp;
00211 };
00212
00213 namespace Cstr
00214 {
00215
00216 template <>
00217 struct CstrArr<EnvVars>
00218 {
00219 char const * const * sarr;
00220
00221 CstrArr(EnvVars const & ev)
00222 {
00223 sarr = ev.getenvp();
00224 }
00225 };
00226
00227 }
00228
00229
00230 }
00231
00232 #endif // BLOCXX_ENVVARS_HPP__