From 08d34659673fc73e4decf3ab04454d9e252ec5b6 Mon Sep 17 00:00:00 2001 From: Ian Bell Date: Mon, 19 May 2025 08:26:50 -0400 Subject: [PATCH] Move to more modern C++ [skip ci] --- src/DataStructures.cpp | 79 ++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 38 deletions(-) diff --git a/src/DataStructures.cpp b/src/DataStructures.cpp index 19083a19..d5ad18b8 100644 --- a/src/DataStructures.cpp +++ b/src/DataStructures.cpp @@ -11,11 +11,11 @@ namespace CoolProp { struct parameter_info { int key; - const char *short_desc, *IO, *units, *description; + std::string short_desc, IO, units, description; bool trivial; ///< True if the input is trivial, and can be directly calculated (constants like critical properties, etc.) }; -const parameter_info parameter_info_list[] = { +const std::vector parameter_info_list = { /// Input/Output parameters {iT, "T", "IO", "K", "Temperature", false}, {iP, "P", "IO", "Pa", "Pressure", false}, @@ -111,14 +111,13 @@ class ParameterInformation std::map short_desc_map, description_map, IO_map, units_map; std::map index_map; ParameterInformation() { - const parameter_info* const end = parameter_info_list + sizeof(parameter_info_list) / sizeof(parameter_info_list[0]); - for (const parameter_info* el = parameter_info_list; el != end; ++el) { - short_desc_map.insert(std::pair(el->key, el->short_desc)); - IO_map.insert(std::pair(el->key, el->IO)); - units_map.insert(std::pair(el->key, el->units)); - description_map.insert(std::pair(el->key, el->description)); - index_map_insert(el->short_desc, el->key); - trivial_map.insert(std::pair(el->key, el->trivial)); + for (auto& el : parameter_info_list) { + short_desc_map.insert(std::pair(el.key, el.short_desc)); + IO_map.insert(std::pair(el.key, el.IO)); + units_map.insert(std::pair(el.key, el.units)); + description_map.insert(std::pair(el.key, el.description)); + index_map_insert(el.short_desc, el.key); + trivial_map.insert(std::pair(el.key, el.trivial)); } // Backward compatibility aliases index_map_insert("D", iDmass); @@ -198,8 +197,8 @@ std::string get_parameter_information(int key, const std::string& info) { std::string get_csv_parameter_list() { auto& parameter_information = get_parameter_information(); std::vector strings; - for (std::map::const_iterator it = parameter_information.index_map.begin(); it != parameter_information.index_map.end(); ++it) { - strings.push_back(it->first); + for (auto& it : parameter_information.index_map) { + strings.push_back(it.first); } return strjoin(strings, ","); } @@ -752,34 +751,36 @@ void split_input_pair(input_pairs pair, parameters& p1, parameters& p2) { struct backend_family_info { backend_families family; - const char* name; + std::string name; }; struct backend_info { backends backend; - const char* name; + std::string name; backend_families family; }; -const backend_family_info backend_family_list[] = { +const std::vector backend_family_list = { {HEOS_BACKEND_FAMILY, "HEOS"}, {REFPROP_BACKEND_FAMILY, "REFPROP"}, {INCOMP_BACKEND_FAMILY, "INCOMP"}, {IF97_BACKEND_FAMILY, "IF97"}, {TREND_BACKEND_FAMILY, "TREND"}, {TTSE_BACKEND_FAMILY, "TTSE"}, {BICUBIC_BACKEND_FAMILY, "BICUBIC"}, {SRK_BACKEND_FAMILY, "SRK"}, {PR_BACKEND_FAMILY, "PR"}, {VTPR_BACKEND_FAMILY, "VTPR"}, {PCSAFT_BACKEND_FAMILY, "PCSAFT"}}; -const backend_info backend_list[] = {{HEOS_BACKEND_PURE, "HelmholtzEOSBackend", HEOS_BACKEND_FAMILY}, - {HEOS_BACKEND_MIX, "HelmholtzEOSMixtureBackend", HEOS_BACKEND_FAMILY}, - {REFPROP_BACKEND_PURE, "REFPROPBackend", REFPROP_BACKEND_FAMILY}, - {REFPROP_BACKEND_MIX, "REFPROPMixtureBackend", REFPROP_BACKEND_FAMILY}, - {INCOMP_BACKEND, "IncompressibleBackend", INCOMP_BACKEND_FAMILY}, - {IF97_BACKEND, "IF97Backend", IF97_BACKEND_FAMILY}, - {TREND_BACKEND, "TRENDBackend", TREND_BACKEND_FAMILY}, - {TTSE_BACKEND, "TTSEBackend", TTSE_BACKEND_FAMILY}, - {BICUBIC_BACKEND, "BicubicBackend", BICUBIC_BACKEND_FAMILY}, - {SRK_BACKEND, "SRKBackend", SRK_BACKEND_FAMILY}, - {PR_BACKEND, "PengRobinsonBackend", PR_BACKEND_FAMILY}, - {VTPR_BACKEND, "VTPRBackend", VTPR_BACKEND_FAMILY}, - {PCSAFT_BACKEND, "PCSAFTBackend", PCSAFT_BACKEND_FAMILY}}; +const std::vector backend_list = { + {HEOS_BACKEND_PURE, "HelmholtzEOSBackend", HEOS_BACKEND_FAMILY}, + {HEOS_BACKEND_MIX, "HelmholtzEOSMixtureBackend", HEOS_BACKEND_FAMILY}, + {REFPROP_BACKEND_PURE, "REFPROPBackend", REFPROP_BACKEND_FAMILY}, + {REFPROP_BACKEND_MIX, "REFPROPMixtureBackend", REFPROP_BACKEND_FAMILY}, + {INCOMP_BACKEND, "IncompressibleBackend", INCOMP_BACKEND_FAMILY}, + {IF97_BACKEND, "IF97Backend", IF97_BACKEND_FAMILY}, + {TREND_BACKEND, "TRENDBackend", TREND_BACKEND_FAMILY}, + {TTSE_BACKEND, "TTSEBackend", TTSE_BACKEND_FAMILY}, + {BICUBIC_BACKEND, "BicubicBackend", BICUBIC_BACKEND_FAMILY}, + {SRK_BACKEND, "SRKBackend", SRK_BACKEND_FAMILY}, + {PR_BACKEND, "PengRobinsonBackend", PR_BACKEND_FAMILY}, + {VTPR_BACKEND, "VTPRBackend", VTPR_BACKEND_FAMILY}, + {PCSAFT_BACKEND, "PCSAFTBackend", PCSAFT_BACKEND_FAMILY} +}; class BackendInformation { @@ -792,17 +793,15 @@ class BackendInformation std::map backend_name_map_r; /// < from backend name to backend BackendInformation() { - const backend_family_info* const family_end = backend_family_list + sizeof(backend_family_list) / sizeof(backend_family_list[0]); - for (const backend_family_info* el = backend_family_list; el != family_end; ++el) { - family_name_map.insert(std::pair(el->family, el->name)); - family_name_map_r.insert(std::pair(el->name, el->family)); + for (auto& el : backend_family_list) { + family_name_map.insert(std::pair(el.family, el.name)); + family_name_map_r.insert(std::pair(el.name, el.family)); } - const backend_info* const backend_end = backend_list + sizeof(backend_list) / sizeof(backend_list[0]); - for (const backend_info* el = backend_list; el != backend_end; ++el) { - backend_family_map.insert(std::pair(el->backend, el->family)); - backend_name_map.insert(std::pair(el->backend, el->name)); - backend_name_map_r.insert(std::pair(el->name, el->backend)); - family_name_map_r.insert(std::pair(el->name, el->family)); + for (auto& el : backend_list) { + backend_family_map.insert(std::pair(el.backend, el.family)); + backend_name_map.insert(std::pair(el.backend, el.name)); + backend_name_map_r.insert(std::pair(el.name, el.backend)); + family_name_map_r.insert(std::pair(el.name, el.family)); } } }; @@ -861,6 +860,10 @@ std::string get_backend_string(backends backend) { # include # include +TEST_CASE("Check that csv list of parameters is possible", "[parameter_list]") { + CHECK_NOTHROW(CoolProp::get_csv_parameter_list()); +} + TEST_CASE("Check that all parameters are described", "") { for (int i = 1; i < CoolProp::iundefined_parameter; ++i) { std::ostringstream ss;