BioCMAMC-ST
env_var.hpp
1#ifndef __BIOMC_COMMON_ENV_VAR_HPP__
2#define __BIOMC_COMMON_ENV_VAR_HPP__
3#include <cstdio>
4#include <cstdlib>
5#include <optional>
6
7#include <sstream>
8#include <string_view>
9
10#ifdef _WIN32
11# include <ostream>
12#endif
13
14namespace Common
15{
20 template <typename T>
21 std::optional<T>
22 read_env(std::string_view varname)
23 {
24 const char* env_var = std::getenv(varname.data());
25 std::optional<T> ret = std::nullopt;
26 if (env_var != nullptr)
27 {
28 std::istringstream stream(env_var);
29 T value;
30 stream >> value;
31 if (stream)
32 {
33 std::printf(
34 "[Config] Env value load: %s %s\r\n", varname.data(), env_var);
35 std::fflush(stdout);
36
37 ret = value;
38 }
39 }
40 return ret;
41 }
42
47 template <typename T>
48 T
49 read_env_or(std::string_view varname, T vdefault)
50 {
51 return read_env<T>(varname).value_or(vdefault);
52 }
53
58 template <typename T>
59 bool
60 set_local_env(std::string_view varname, T val)
61 {
62#ifdef _WIN32
63 // Windows-specific handling (not implemented)
64 std::cerr << "Not implemented for Win32" << std::endl;
65 return false;
66#else
67 std::ostringstream oss;
68 oss << val;
69 std::string str_value = oss.str();
70
71 return setenv(varname.data(), str_value.c_str(), 1) == 0;
72#endif
73 }
74
75} // namespace Common
76
77#endif
Definition config_loader.hpp:8
bool set_local_env(std::string_view varname, T val)
Wrapper arround set_env.
Definition env_var.hpp:60
T read_env_or(std::string_view varname, T vdefault)
Wrapper arround get_env to get envariable with fallback to default.
Definition env_var.hpp:49
std::optional< T > read_env(std::string_view varname)
Wrapper arround get_env to get optional envariable.
Definition env_var.hpp:22