~ubuntu-branches/ubuntu/wily/bombono-dvd/wily

« back to all changes in this revision

Viewing changes to libs/boost-lib/boost/test/utils/runtime/env/environment.ipp

  • Committer: Bazaar Package Importer
  • Author(s): Alessio Treglia
  • Date: 2010-11-04 11:46:25 UTC
  • mto: This revision was merged to the branch mainline in revision 8.
  • Revision ID: james.westby@ubuntu.com-20101104114625-8xfdhvhpsm51i0nu
Tags: upstream-0.8.0
ImportĀ upstreamĀ versionĀ 0.8.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//  (C) Copyright Gennadiy Rozental 2005-2008.
 
2
//  Distributed under the Boost Software License, Version 1.0.
 
3
//  (See accompanying file LICENSE_1_0.txt or copy at 
 
4
//  http://www.boost.org/LICENSE_1_0.txt)
 
5
 
 
6
//  See http://www.boost.org/libs/test for the library home page.
 
7
//
 
8
//  File        : $RCSfile$
 
9
//
 
10
//  Version     : $Revision: 57992 $
 
11
//
 
12
//  Description : implements model of program environment 
 
13
// ***************************************************************************
 
14
 
 
15
#ifndef BOOST_RT_ENV_ENVIRONMENT_IPP_062904GER
 
16
#define BOOST_RT_ENV_ENVIRONMENT_IPP_062904GER
 
17
 
 
18
// Boost.Runtime.Parameter
 
19
#include <boost/test/utils/runtime/config.hpp>
 
20
#include <boost/test/utils/runtime/validation.hpp>
 
21
 
 
22
#include <boost/test/utils/runtime/env/variable.hpp>
 
23
 
 
24
// Boost.Test
 
25
#include <boost/test/utils/basic_cstring/compare.hpp>
 
26
#include <boost/test/utils/basic_cstring/io.hpp>
 
27
 
 
28
// STL
 
29
#include <map>
 
30
#include <list>
 
31
 
 
32
namespace boost {
 
33
 
 
34
namespace BOOST_RT_PARAM_NAMESPACE {
 
35
 
 
36
namespace environment {
 
37
 
 
38
// ************************************************************************** //
 
39
// **************             runtime::environment             ************** //
 
40
// ************************************************************************** //
 
41
 
 
42
namespace rt_env_detail {
 
43
 
 
44
typedef std::map<cstring,rt_env_detail::variable_data> registry;
 
45
typedef std::list<dstring> keys;
 
46
 
 
47
BOOST_RT_PARAM_INLINE registry& s_registry()    { static registry instance; return instance; }
 
48
BOOST_RT_PARAM_INLINE keys&     s_keys()        { static keys instance; return instance; }
 
49
 
 
50
BOOST_RT_PARAM_INLINE variable_data&
 
51
new_var_record( cstring var_name )
 
52
{
 
53
    // save the name in list of keys
 
54
    s_keys().push_back( dstring() );
 
55
    dstring& key = s_keys().back();
 
56
    assign_op( key, var_name, 0 );
 
57
 
 
58
    // create and return new record
 
59
    variable_data& new_var_data = s_registry()[key];
 
60
    
 
61
    new_var_data.m_var_name = key;
 
62
    
 
63
    return new_var_data;
 
64
}
 
65
 
 
66
//____________________________________________________________________________//
 
67
 
 
68
BOOST_RT_PARAM_INLINE variable_data*
 
69
find_var_record( cstring var_name )
 
70
{
 
71
    registry::iterator it = s_registry().find( var_name );
 
72
 
 
73
    return it == s_registry().end() ? 0 : &(it->second);
 
74
}
 
75
 
 
76
//____________________________________________________________________________//
 
77
 
 
78
#ifdef BOOST_MSVC 
 
79
#pragma warning(push) 
 
80
#pragma warning(disable:4996) // getenv
 
81
#endif
 
82
 
 
83
BOOST_RT_PARAM_INLINE cstring
 
84
sys_read_var( cstring var_name )
 
85
{
 
86
    using namespace std;
 
87
    return BOOST_RT_PARAM_GETENV( var_name.begin() );
 
88
}
 
89
 
 
90
#ifdef BOOST_MSVC 
 
91
#pragma warning(pop) 
 
92
#endif
 
93
//____________________________________________________________________________//
 
94
 
 
95
BOOST_RT_PARAM_INLINE void
 
96
sys_write_var( cstring var_name, format_stream& var_value )
 
97
{
 
98
    BOOST_RT_PARAM_PUTENV( var_name, cstring( var_value.str() ) );
 
99
}
 
100
 
 
101
//____________________________________________________________________________//
 
102
 
 
103
} // namespace rt_env_detail
 
104
 
 
105
BOOST_RT_PARAM_INLINE variable_base
 
106
var( cstring var_name )
 
107
{
 
108
    rt_env_detail::variable_data* vd = rt_env_detail::find_var_record( var_name );
 
109
 
 
110
    BOOST_RT_PARAM_VALIDATE_LOGIC( !!vd,
 
111
                                   BOOST_RT_PARAM_LITERAL( "First access to the environment variable " ) 
 
112
                                        << var_name << BOOST_RT_PARAM_LITERAL( " should be typed" ) );
 
113
 
 
114
    return variable_base( *vd );
 
115
}
 
116
 
 
117
//____________________________________________________________________________//
 
118
 
 
119
} // namespace environment
 
120
 
 
121
} // namespace BOOST_RT_PARAM_NAMESPACE
 
122
 
 
123
} // namespace boost
 
124
 
 
125
#endif // BOOST_RT_ENV_ENVIRONMENT_IPP_062904GER