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
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00048 #ifndef UNIXSTL_INCL_UNIXSTL_SYSTEM_HPP_ENVIRONMENT_VARIABLE
00049 #define UNIXSTL_INCL_UNIXSTL_SYSTEM_HPP_ENVIRONMENT_VARIABLE
00050
00051 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00052 # define UNIXSTL_VER_UNIXSTL_SYSTEM_HPP_ENVIRONMENT_VARIABLE_MAJOR 4
00053 # define UNIXSTL_VER_UNIXSTL_SYSTEM_HPP_ENVIRONMENT_VARIABLE_MINOR 2
00054 # define UNIXSTL_VER_UNIXSTL_SYSTEM_HPP_ENVIRONMENT_VARIABLE_REVISION 1
00055 # define UNIXSTL_VER_UNIXSTL_SYSTEM_HPP_ENVIRONMENT_VARIABLE_EDIT 65
00056 #endif
00057
00058
00059
00060
00061
00062 #ifndef UNIXSTL_INCL_UNIXSTL_H_UNIXSTL
00063 # include <unixstl/unixstl.h>
00064 #endif
00065 #ifndef UNIXSTL_INCL_UNIXSTL_SYSTEM_HPP_SYSTEM_TRAITS
00066 # include <unixstl/system/system_traits.hpp>
00067 #endif
00068 #ifndef STLSOFT_INCL_STLSOFT_SHIMS_ACCESS_HPP_STRING
00069 # include <stlsoft/shims/access/string.hpp>
00070 #endif
00071 #ifndef UNIXSTL_INCL_UNIXSTL_SHIMS_ACCESS_HPP_STRING
00072 # include <unixstl/shims/access/string.hpp>
00073 #endif
00074 #ifndef STLSOFT_INCL_STLSOFT_MEMORY_HPP_AUTO_BUFFER
00075 # include <stlsoft/memory/auto_buffer.hpp>
00076 #endif
00077 #ifndef STLSOFT_INCL_STLSOFT_MEMORY_HPP_ALLOCATOR_SELECTOR
00078 # include <stlsoft/memory/allocator_selector.hpp>
00079 #endif
00080
00081
00082
00083
00084
00085 #ifndef _UNIXSTL_NO_NAMESPACE
00086 # if defined(_STLSOFT_NO_NAMESPACE) || \
00087 defined(STLSOFT_DOCUMENTATION_SKIP_SECTION)
00088
00089 namespace unixstl
00090 {
00091 # else
00092
00093
00094 namespace stlsoft
00095 {
00096
00097 namespace unixstl_project
00098 {
00099
00100 # endif
00101 #endif
00102
00103
00104
00105
00106
00107
00108
00109
00118 template< ss_typename_param_k C
00119 #ifdef STLSOFT_CF_TEMPLATE_CLASS_DEFAULT_CLASS_ARGUMENT_SUPPORT
00120 , ss_typename_param_k T = system_traits<C>
00121 , ss_typename_param_k A = ss_typename_type_def_k stlsoft_ns_qual(allocator_selector)<C>::allocator_type
00122 #else
00123 , ss_typename_param_k T
00124 #endif
00125 >
00126 class basic_environment_variable
00127 {
00128 public:
00130 typedef C char_type;
00132 typedef T traits_type;
00133 #ifdef STLSOFT_CF_TEMPLATE_CLASS_DEFAULT_CLASS_ARGUMENT_SUPPORT
00135 typedef A allocator_type;
00137 typedef basic_environment_variable<C, T, A> class_type;
00138 #else
00140 typedef basic_environment_variable<C, T> class_type;
00141 #endif
00143 typedef us_size_t size_type;
00145 typedef us_ptrdiff_t difference_type;
00146
00147
00148 public:
00150 ss_explicit_k basic_environment_variable(char_type const* name)
00151 : m_buffer(1 + traits_type::get_environment_variable(name, 0, 0))
00152 {
00153 if( 0 == traits_type::get_environment_variable(name, &m_buffer[0], m_buffer.size()) &&
00154 0 != m_buffer.size())
00155 {
00156 m_buffer[0] = 0;
00157 }
00158 }
00159 #ifdef STLSOFT_CF_MEMBER_TEMPLATE_CTOR_SUPPORT
00161 template<ss_typename_param_k S>
00162 ss_explicit_k basic_environment_variable(S const& name)
00163 : m_buffer(1 + traits_type::get_environment_variable(stlsoft_ns_qual(c_str_ptr)(name), 0, 0))
00164 {
00165 if( 0 == traits_type::get_environment_variable(stlsoft_ns_qual(c_str_ptr)(name), &m_buffer[0], m_buffer.size()) &&
00166 0 != m_buffer.size())
00167 {
00168 m_buffer[0] = 0;
00169 }
00170 }
00171 #endif
00172
00173
00174 public:
00176 operator char_type const* () const
00177 {
00178 return m_buffer.data();
00179 }
00180
00181
00182 public:
00184 size_type length() const
00185 {
00186 return m_buffer.size() - 1;
00187 }
00188
00189
00190 private:
00191 typedef stlsoft_ns_qual(auto_buffer_old)< char_type
00192 #ifdef STLSOFT_CF_TEMPLATE_CLASS_DEFAULT_CLASS_ARGUMENT_SUPPORT
00193 , allocator_type
00194 #else
00195 , malloc_allocator<char_type>
00196 #endif
00197 > buffer_type;
00198
00199 buffer_type m_buffer;
00200
00201
00202 private:
00203 basic_environment_variable(basic_environment_variable const&);
00204 basic_environment_variable& operator =(basic_environment_variable const&);
00205 };
00206
00207
00208
00209
00210
00215 typedef basic_environment_variable<us_char_a_t, system_traits<us_char_a_t> > environment_variable_a;
00220 typedef basic_environment_variable<us_char_w_t, system_traits<us_char_w_t> > environment_variable_w;
00225 typedef basic_environment_variable<char, system_traits<char> > environment_variable;
00226
00227
00228
00229
00230
00231 #if !defined(STLSOFT_COMPILER_IS_MSVC) || \
00232 _MSC_VER >= 1100
00233
00239 template<ss_typename_param_k C>
00240 inline basic_environment_variable<C> make_environment_variable(C const* path)
00241 {
00242 return basic_environment_variable<C>(path);
00243 }
00244
00245 #endif
00246
00248
00249
00250 #ifdef STLSOFT_UNITTEST
00251 # include "./unittest/environment_variable_unittest_.h"
00252 #endif
00253
00254
00255
00256 #ifndef _UNIXSTL_NO_NAMESPACE
00257 # if defined(_STLSOFT_NO_NAMESPACE) || \
00258 defined(STLSOFT_DOCUMENTATION_SKIP_SECTION)
00259 }
00260 # else
00261 }
00262 }
00263 # endif
00264 #endif
00265
00266
00267
00268 #endif
00269
00270