4#ifndef _CRT_SECURE_NO_WARNINGS
5# define _CRT_SECURE_NO_WARNINGS
20# define __has_feature(x) 0
46#define COOLPROPDBL_MAPS_TO_DOUBLE
47#ifdef COOLPROPDBL_MAPS_TO_DOUBLE
55# define DEPRECATED(func) func __attribute__((deprecated))
56#elif defined(_MSC_VER)
57# define DEPRECATED(func) __declspec(deprecated) func
59# pragma message("WARNING: You need to implement DEPRECATED for this compiler")
60# define DEPRECATED(func) func
66 typedef std::map<std::string, double> numbers_map;
68 typedef std::map<std::string, std::string> strings_map;
70 typedef std::map<std::string, std::vector<double>> double_vectors_map;
71 double_vectors_map double_vectors;
72 typedef std::map<std::string, std::vector<std::string>> string_vectors_map;
73 string_vectors_map string_vectors;
78 return numbers.empty() && strings.empty() && double_vectors.empty() && string_vectors.empty();
80 void add_string(
const std::string& s1,
const std::string& s2) {
81 strings.insert(std::pair<std::string, std::string>(s1, s2));
85 numbers.insert(std::pair<std::string, double>(s1, d));
88 return numbers.find(s1) != numbers.end();
91 double_vectors.insert(std::pair<std::string, std::vector<double>>(s1, d));
94 string_vectors.insert(std::pair<std::string, std::vector<std::string>>(s1, d));
97 strings_map::const_iterator i = strings.find(s);
98 if (i != strings.end()) {
105 numbers_map::const_iterator i = numbers.find(s);
106 if (i != numbers.end()) {
113 double get_double(
const std::string& s,
const double default_value)
const {
114 numbers_map::const_iterator i = numbers.find(s);
115 if (i != numbers.end()) {
118 return default_value;
125 double_vectors_map::const_iterator i = double_vectors.find(s);
126 if (i != double_vectors.end()) {
133 string_vectors_map::const_iterator i = string_vectors.find(s);
134 if (i != string_vectors.end()) {
145 for (
typename M::iterator it = amap.begin(); it != amap.end(); ++it) {
151#define CATCH_ALL_ERRORS_RETURN_HUGE(x) \
154 } catch (const std::exception& e) { \