25 #ifndef FABLE_ENVIRONMENT_HPP_ 26 #define FABLE_ENVIRONMENT_HPP_ 33 #include <boost/optional.hpp> 40 Environment(std::initializer_list<std::pair<std::string const, std::string>> init)
42 Environment(
const std::map<std::string, std::string>& defines) : defines_(defines) {}
43 Environment(std::map<std::string, std::string>&& defines) : defines_(std::move(defines)) {}
46 bool prefer_external()
const {
return prefer_external_; }
47 void prefer_external(
bool value) { prefer_external_ = value; }
49 bool allow_undefined()
const {
return allow_undefined_; }
50 void allow_undefined(
bool value) { allow_undefined_ = value; }
52 void insert(
const std::string& key,
const std::string& value) {
53 assert(defines_.count(key) == 0);
54 defines_.insert(std::make_pair(key, value));
57 void set(
const std::string& key,
const std::string& value) { defines_[key] = value; }
68 boost::optional<std::string>
get(
const std::string& key)
const {
69 return get(key, prefer_external_);
71 boost::optional<std::string>
get(
const std::string& key,
bool prefer_external)
const;
81 std::string
get_or(
const std::string& key,
const std::string& alternative)
const {
82 return get(key).value_or(alternative);
84 std::string
get_or(
const std::string& key,
const std::string& alternative,
85 bool prefer_external)
const {
86 return get(key, prefer_external).value_or(alternative);
97 std::string
require(
const std::string& key)
const {
return require(key, prefer_external_); }
98 std::string
require(
const std::string& key,
bool prefer_external)
const;
107 return evaluate(s, prefer_external_, allow_undefined_);
109 std::string
evaluate(
const std::string& s,
bool prefer_external,
bool allow_undefined)
const;
118 return interpolate(s, prefer_external_, allow_undefined_);
120 std::string
interpolate(
const std::string& s,
bool prefer_external,
bool allow_undefined)
const;
123 bool prefer_external_{
true};
124 bool allow_undefined_{
false};
125 std::map<std::string, std::string> defines_;
128 inline std::string interpolate_vars(
const std::string& s,
const Environment* env =
nullptr) {
129 if (env !=
nullptr) {
130 return env->interpolate(s);
138 #endif // FABLE_ENVIRONMENT_HPP_
Definition: environment.hpp:37
std::string require(const std::string &key) const
Definition: environment.hpp:97
std::string interpolate(const std::string &s) const
Definition: environment.hpp:117
std::string evaluate(const std::string &s) const
Definition: environment.hpp:106
std::string get_or(const std::string &key, const std::string &alternative) const
Definition: environment.hpp:81