powerd++  0.4.4
env.hpp
Go to the documentation of this file.
1 
7 #ifndef _POWERDXX_SYS_ENV_HPP_
8 #define _POWERDXX_SYS_ENV_HPP_
9 
10 #include "error.hpp" /* sys::sc_error */
11 
12 #include <cstdlib> /* getenv(), setenv() etc. */
13 
14 namespace sys {
15 
19 namespace env {
20 
24 struct error {};
25 
32 class Var {
33  private:
37  char const * const name;
38 
39  public:
48  template <size_t Size>
49  Var(char const (& name)[Size]) : name{name} {}
50 
54  Var(Var const &) = delete;
55 
59  Var & operator =(Var const &) = delete;
60 
69  operator char const *() const {
70  return getenv(this->name);
71  }
72 
87  Var & operator =(char const * const assign) {
88  auto const result =
89  assign
90  ? setenv(this->name, assign, 1)
91  : unsetenv(this->name);
92  if (0 != result) {
93  throw sc_error<error>{errno};
94  }
95  return *this;
96  }
97 
108  Var & erase() {
109  return *this = nullptr;
110  }
111 
120  char const * c_str() const {
121  return *this;
122  }
123 };
124 
128 struct Vars {
137  template <typename T>
138  Var const operator [](T const & name) const {
139  return {name};
140  }
141 
150  template <typename T>
151  Var operator [](T const & name) {
152  return {name};
153  }
154 } vars;
156 } /* namespace env */
157 
158 } /* namespace sys */
159 
160 #endif /* _POWERDXX_SYS_ENV_HPP_ */
sys::sc_error
Can be thrown by syscall function wrappers if the function returned with an error.
Definition: error.hpp:26
sys::env::Var
A reference type refering to an environment variable.
Definition: env.hpp:32
sys::env::Var::name
const char *const name
A pointer to the variable name.
Definition: env.hpp:37
sys::env::Vars::operator[]
const Var operator[](T const &name) const
Access environment variable by name.
Definition: env.hpp:138
sys
Wrappers around native system interfaces.
sys::env::Var::erase
Var & erase()
Explicitly deletes the environment variable.
Definition: env.hpp:108
sys::env::Vars
A singleton class providing access to environment variables.
Definition: env.hpp:128
sys::env::Var::operator=
Var & operator=(Var const &)=delete
Do not permit copy assignment.
sys::env::error
The domain error type.
Definition: env.hpp:24
sys::env::Var::c_str
const char * c_str() const
Explicitly retrieve the value as a character array.
Definition: env.hpp:120
sys::env::Var::Var
Var(char const (&name)[Size])
Construct an environment variable reference.
Definition: env.hpp:49
sys::env::vars
struct sys::env::Vars vars
Singleton providing access to environment variables.
error.hpp
Provides system call error handling.