4#ifndef _CRT_SECURE_NO_WARNINGS
5# define _CRT_SECURE_NO_WARNINGS
19# define __has_feature(x) 0
45#define COOLPROPDBL_MAPS_TO_DOUBLE
46#ifdef COOLPROPDBL_MAPS_TO_DOUBLE
57 using numbers_map = std::map<std::string, double>;
59 using strings_map = std::map<std::string, std::string>;
61 using double_vectors_map = std::map<std::string, std::vector<double>>;
62 double_vectors_map double_vectors;
63 using string_vectors_map = std::map<std::string, std::vector<std::string>>;
64 string_vectors_map string_vectors;
69 return numbers.empty() && strings.empty() && double_vectors.empty() && string_vectors.empty();
71 void add_string(
const std::string& s1,
const std::string& s2) {
72 strings.insert(std::pair<std::string, std::string>(s1, s2));
76 numbers.insert(std::pair<std::string, double>(s1, d));
79 return numbers.find(s1) != numbers.end();
82 double_vectors.insert(std::pair<std::string, std::vector<double>>(s1, d));
85 string_vectors.insert(std::pair<std::string, std::vector<std::string>>(s1, d));
88 auto i = strings.find(s);
89 if (i != strings.end()) {
96 auto i = numbers.find(s);
97 if (i != numbers.end()) {
104 double get_double(
const std::string& s,
const double default_value)
const {
105 auto i = numbers.find(s);
106 if (i != numbers.end()) {
109 return default_value;
116 auto i = double_vectors.find(s);
117 if (i != double_vectors.end()) {
124 auto i = string_vectors.find(s);
125 if (i != string_vectors.end()) {
136 for (
typename M::iterator it = amap.begin(); it != amap.end(); ++it) {
142#define CATCH_ALL_ERRORS_RETURN_HUGE(x) \
145 } catch (const std::exception& e) { \