Geant4
11.3.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
GetEnv.hh
Go to the documentation of this file.
1
//
2
// MIT License
3
// Copyright (c) 2020 Jonathan R. Madsen
4
// Permission is hereby granted, free of charge, to any person obtaining a copy
5
// of this software and associated documentation files (the "Software"), to deal
6
// in the Software without restriction, including without limitation the rights
7
// to use, copy, modify, merge, publish, distribute, sublicense, and
8
// copies of the Software, and to permit persons to whom the Software is
9
// furnished to do so, subject to the following conditions:
10
// The above copyright notice and this permission notice shall be included in
11
// all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED
12
// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
13
// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
15
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
16
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
17
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
18
//
19
//
20
21
#pragma once
22
23
#include <cctype>
24
#include <cstdlib>
25
#include <functional>
26
#include <iomanip>
27
#include <iostream>
28
#include <map>
29
#include <mutex>
30
#include <set>
31
#include <sstream>
// IWYU pragma: keep
32
#include <string>
33
#include <tuple>
34
#include <utility>
35
36
namespace
PTL
37
{
38
//--------------------------------------------------------------------------------------//
39
// use this function to get an environment variable setting +
40
// a default if not defined, e.g.
41
// int num_threads =
42
// GetEnv<int>("FORCENUMBEROFTHREADS",
43
// std::thread::hardware_concurrency());
44
//
45
template
<
typename
Tp>
46
Tp
47
GetEnv
(
const
std::string& env_id, Tp _default = Tp())
48
{
49
char
* env_var = std::getenv(env_id.c_str());
50
if
(env_var)
51
{
52
std::string str_var = std::string(env_var);
53
std::istringstream iss(str_var);
54
Tp var = Tp();
55
iss >> var;
56
return
var;
57
}
58
59
// return default if not specified in environment
60
return
_default;
61
}
62
63
//--------------------------------------------------------------------------------------//
64
// overload for boolean
65
//
66
template
<>
67
inline
bool
68
GetEnv
(
const
std::string& env_id,
bool
_default)
69
{
70
char
* env_var = std::getenv(env_id.c_str());
71
if
(env_var)
72
{
73
std::string var = std::string(env_var);
74
bool
val =
true
;
75
if
(var.find_first_not_of(
"0123456789"
) == std::string::npos)
76
val = (bool) atoi(var.c_str());
77
else
78
{
79
for
(
auto
& itr : var)
80
itr = tolower(itr);
81
if
(var ==
"off"
|| var ==
"false"
)
82
val =
false
;
83
}
84
return
val;
85
}
86
87
// return default if not specified in environment
88
return
_default;
89
}
90
91
//--------------------------------------------------------------------------------------//
92
93
}
// namespace PTL
PTL
Backports of C++ language features for use with C++11 compilers.
Definition
AutoLock.hh:255
PTL::GetEnv
Tp GetEnv(const std::string &env_id, Tp _default=Tp())
Definition
GetEnv.hh:47
geant4-v11.3.0
source
externals
ptl
include
PTL
GetEnv.hh
Generated by
1.13.2