5 #ifndef CK_CODE_GEN_RTC
10 #include <string_view>
25 std::string value_env_str{vp};
27 for(
auto& c : value_env_str)
29 if(std::isalpha(c) != 0)
31 c = std::tolower(
static_cast<unsigned char>(c));
35 if(value_env_str ==
"disable" || value_env_str ==
"disabled" || value_env_str ==
"0" ||
36 value_env_str ==
"no" || value_env_str ==
"off" || value_env_str ==
"false")
40 else if(value_env_str ==
"enable" || value_env_str ==
"enabled" || value_env_str ==
"1" ||
41 value_env_str ==
"yes" || value_env_str ==
"on" || value_env_str ==
"true")
47 throw std::runtime_error(
"Invalid value for env variable");
80 void Unset() { is_unset =
true; }
88 explicit EnvVar(
const char*
const name,
const T& def_val)
91 const char* vp = std::getenv(name);
108 #define CK_DECLARE_ENV_VAR(name, type, default_val) \
109 namespace ck::env { \
112 static_assert(std::is_same_v<name, ::ck::env::name>, \
113 "CK_DECLARE_ENV* must be used in the global namespace"); \
114 using value_type = type; \
115 static ck::internal::EnvVar<type>& Ref() \
117 static ck::internal::EnvVar<type> var{#name, default_val}; \
123 #define CK_DECLARE_ENV_VAR_BOOL(name) CK_DECLARE_ENV_VAR(name, bool, false)
125 #define CK_DECLARE_ENV_VAR_UINT64(name) CK_DECLARE_ENV_VAR(name, uint64_t, 0)
127 #define CK_DECLARE_ENV_VAR_STR(name) CK_DECLARE_ENV_VAR(name, std::string, "")
129 #define CK_ENV(name) \
132 template <
class EnvVar>
135 static_assert(std::is_same_v<typename EnvVar::value_type, std::string>);
136 return EnvVar::Ref().GetValue();
139 template <
class EnvVar>
142 static_assert(std::is_same_v<typename EnvVar::value_type, bool>);
143 return !EnvVar::Ref().IsUnset() && EnvVar::Ref().GetValue();
146 template <
class EnvVar>
149 static_assert(std::is_same_v<typename EnvVar::value_type, bool>);
150 return !EnvVar::Ref().IsUnset() && !EnvVar::Ref().GetValue();
153 template <
class EnvVar>
156 static_assert(std::is_same_v<typename EnvVar::value_type, uint64_t>);
157 return EnvVar::Ref().GetValue();
160 template <
class EnvVar>
163 return EnvVar::Ref().IsUnset();
166 template <
class EnvVar>
169 EnvVar::Ref().Unset();
173 template <
typename EnvVar,
typename ValueType>
176 static_assert(std::is_same_v<typename EnvVar::value_type, ValueType>);
177 EnvVar::Ref().UpdateValue(val);
180 template <
typename EnvVar>
183 EnvVar::Ref().UpdateValue(
bool EnvIsUnset(EnvVar)
Definition: env.hpp:161
bool EnvIsEnabled(EnvVar)
Definition: env.hpp:140
uint64_t EnvValue(EnvVar)
Definition: env.hpp:154
void EnvUnset(EnvVar)
Definition: env.hpp:167
void UpdateEnvVar(EnvVar, const ValueType &val)
updates the cached value of an environment variable
Definition: env.hpp:174
bool EnvIsDisabled(EnvVar)
Definition: env.hpp:147
const std::string & EnvGetString(EnvVar)
Definition: env.hpp:133
Definition: allocators.h:423
unsigned __int64 uint64_t
Definition: stdint.h:136
EnvVar(const char *const name, const T &def_val)
Definition: env.hpp:88
void UpdateValue(const T &val)
Definition: env.hpp:82
void Unset()
Definition: env.hpp:80
bool IsUnset() const
Definition: env.hpp:78
const T & GetValue() const
Definition: env.hpp:76
static bool parse_env_var_value(const char *vp)
Definition: env.hpp:23
static std::string parse_env_var_value(const char *vp)
Definition: env.hpp:65
static uint64_t parse_env_var_value(const char *vp)
Definition: env.hpp:59
#define CK_DECLARE_ENV_VAR_BOOL(name)
Definition: env.hpp:123