From f987a3794c23dd2aeb8aeb78a41ff5ad84ca53e7 Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Wed, 4 Jan 2023 10:31:13 +0100 Subject: [PATCH] Parameter: move more code to compile unit in particular this allows encapsulating sstream --- opm/common/utility/parameters/Parameter.hpp | 93 +--------- .../common/utility/parameters/Parameter.cpp | 163 ++++++++++++++---- 2 files changed, 141 insertions(+), 115 deletions(-) diff --git a/opm/common/utility/parameters/Parameter.hpp b/opm/common/utility/parameters/Parameter.hpp index 681a7f97b..10f4bd0e3 100644 --- a/opm/common/utility/parameters/Parameter.hpp +++ b/opm/common/utility/parameters/Parameter.hpp @@ -37,7 +37,6 @@ #define OPM_PARAMETER_HEADER #include -#include #include #include @@ -89,30 +88,8 @@ namespace Opm { struct ParameterMapItemTrait { static int convert(const ParameterMapItem& item, std::string& conversion_error, - const bool) - { - conversion_error = correct_parameter_tag(item); - if (conversion_error != "") { - return 0; - } - const Parameter& parameter = dynamic_cast(item); - conversion_error = correct_type(parameter, ID_param_type__int); - if (conversion_error != "") { - return 0; - } - std::stringstream stream; - stream << parameter.getValue(); - int value; - stream >> value; - if (stream.fail()) { - conversion_error = "Conversion to '" + - ID_param_type__int + - "' failed. Data was '" + - parameter.getValue() + "'.\n"; - return 0; - } - return value; - } + const bool); + static std::string type() {return ID_param_type__int;} }; @@ -125,30 +102,8 @@ namespace Opm { struct ParameterMapItemTrait { static double convert(const ParameterMapItem& item, std::string& conversion_error, - const bool) - { - conversion_error = correct_parameter_tag(item); - if (conversion_error != "") { - return 0.0; - } - const Parameter& parameter = dynamic_cast(item); - conversion_error = correct_type(parameter, ID_param_type__float); - if (conversion_error != "") { - return 0.0; - } - std::stringstream stream; - stream << parameter.getValue(); - double value; - stream >> value; - if (stream.fail()) { - conversion_error = "Conversion to '" + - ID_param_type__float + - "' failed. Data was '" + - parameter.getValue() + "'.\n"; - return 0.0; - } - return value; - } + const bool); + static std::string type() {return ID_param_type__float;} }; @@ -161,29 +116,8 @@ namespace Opm { struct ParameterMapItemTrait { static bool convert(const ParameterMapItem& item, std::string& conversion_error, - const bool) - { - conversion_error = correct_parameter_tag(item); - if (conversion_error != "") { - return false; - } - const Parameter& parameter = dynamic_cast(item); - conversion_error = correct_type(parameter, ID_param_type__bool); - if (conversion_error != "") { - return false; - } - if (parameter.getValue() == ID_true) { - return true; - } else if (parameter.getValue() == ID_false) { - return false; - } else { - conversion_error = "Conversion failed. Data was '" + - parameter.getValue() + - "', but should be one of '" + - ID_true + "' or '" + ID_false + "'.\n"; - return false; - } - } + const bool); + static std::string type() {return ID_param_type__bool;} }; @@ -196,19 +130,8 @@ namespace Opm { struct ParameterMapItemTrait { static std::string convert(const ParameterMapItem& item, std::string& conversion_error, - const bool) - { - conversion_error = correct_parameter_tag(item); - if (conversion_error != "") { - return ""; - } - const Parameter& parameter = dynamic_cast(item); - conversion_error = correct_type(parameter, ID_param_type__string); - if (conversion_error != "") { - return ""; - } - return parameter.getValue(); - } + const bool); + static std::string type() {return ID_param_type__string;} }; } // namespace Opm diff --git a/src/opm/common/utility/parameters/Parameter.cpp b/src/opm/common/utility/parameters/Parameter.cpp index 700106b88..630cf02de 100644 --- a/src/opm/common/utility/parameters/Parameter.cpp +++ b/src/opm/common/utility/parameters/Parameter.cpp @@ -36,37 +36,140 @@ #if HAVE_CONFIG_H #include "config.h" #endif -#include #include -namespace Opm { - std::string - correct_parameter_tag(const ParameterMapItem& item) - { - std::string tag = item.getTag(); - if (tag != ID_xmltag__param) { - std::string error = "The XML tag was '" + - tag + "' but should be '" + - ID_xmltag__param + "'.\n"; - return error; - } else { - return ""; - } - } +#include +#include + +namespace Opm { + +std::string +correct_parameter_tag(const ParameterMapItem& item) +{ + std::string tag = item.getTag(); + if (tag != ID_xmltag__param) { + std::string error = "The XML tag was '" + + tag + "' but should be '" + + ID_xmltag__param + "'.\n"; + return error; + } else { + return ""; + } +} + +std::string +correct_type(const Parameter& parameter, + const std::string& param_type) +{ + std::string type = parameter.getType(); + if (type != param_type && type != ID_param_type__cmdline) { + std::string error = "The data was of type '" + type + + "' but should be of type '" + + param_type + "'.\n"; + return error; + } else { + return ""; + } +} + +int ParameterMapItemTrait:: +convert(const ParameterMapItem& item, + std::string& conversion_error, + const bool) +{ + conversion_error = correct_parameter_tag(item); + if (!conversion_error.empty()) { + return 0; + } + const Parameter& parameter = dynamic_cast(item); + conversion_error = correct_type(parameter, ID_param_type__int); + if (!conversion_error.empty()) { + return 0; + } + std::stringstream stream; + stream << parameter.getValue(); + int value; + stream >> value; + if (stream.fail()) { + conversion_error = "Conversion to '" + + ID_param_type__int + + "' failed. Data was '" + + parameter.getValue() + "'.\n"; + return 0; + } + return value; +} + +double ParameterMapItemTrait:: +convert(const ParameterMapItem& item, + std::string& conversion_error, + const bool) +{ + conversion_error = correct_parameter_tag(item); + if (!conversion_error.empty()) { + return 0.0; + } + const Parameter& parameter = dynamic_cast(item); + conversion_error = correct_type(parameter, ID_param_type__float); + if (!conversion_error.empty()) { + return 0.0; + } + std::stringstream stream; + stream << parameter.getValue(); + double value; + stream >> value; + if (stream.fail()) { + conversion_error = "Conversion to '" + + ID_param_type__float + + "' failed. Data was '" + + parameter.getValue() + "'.\n"; + return 0.0; + } + return value; +} + +bool ParameterMapItemTrait:: +convert(const ParameterMapItem& item, + std::string& conversion_error, + const bool) +{ + conversion_error = correct_parameter_tag(item); + if (!conversion_error.empty()) { + return false; + } + const Parameter& parameter = dynamic_cast(item); + conversion_error = correct_type(parameter, ID_param_type__bool); + if (!conversion_error.empty()) { + return false; + } + if (parameter.getValue() == ID_true) { + return true; + } else if (parameter.getValue() == ID_false) { + return false; + } else { + conversion_error = "Conversion failed. Data was '" + + parameter.getValue() + + "', but should be one of '" + + ID_true + "' or '" + ID_false + "'.\n"; + return false; + } +} + +std::string ParameterMapItemTrait:: +convert(const ParameterMapItem& item, + std::string& conversion_error, + const bool) +{ + conversion_error = correct_parameter_tag(item); + if (!conversion_error.empty()) { + return ""; + } + const Parameter& parameter = dynamic_cast(item); + conversion_error = correct_type(parameter, ID_param_type__string); + if (!conversion_error.empty()) { + return ""; + } + return parameter.getValue(); +} - std::string - correct_type(const Parameter& parameter, - const std::string& param_type) - { - std::string type = parameter.getType(); - if ( (type != param_type) && - (type != ID_param_type__cmdline) ) { - std::string error = "The data was of type '" + type + - "' but should be of type '" + - param_type + "'.\n"; - return error; - } else { - return ""; - } - } } // namespace Opm