diff --git a/opm/parser/eclipse/Utility/String.hpp b/opm/parser/eclipse/Utility/String.hpp index 5547494a2..9bef51366 100644 --- a/opm/parser/eclipse/Utility/String.hpp +++ b/opm/parser/eclipse/Utility/String.hpp @@ -20,9 +20,21 @@ typename std::decay< T >::type uppercase( T&& x ) { return uppercase( t, t ); } +template +std::string ltrim_copy(const T& s) +{ + auto ret = std::string(s.c_str()); + + const auto start = ret.find_first_not_of(" \t\n\r\f\v"); + if (start == std::string::npos) + return ""; + + return ret.substr(start); +} + template -std::string trim_copy(const T& s) { +std::string rtrim_copy(const T& s) { auto ret = std::string(s.c_str()); @@ -32,6 +44,11 @@ std::string trim_copy(const T& s) { return ret.substr(0, end + 1); } + +template +std::string trim_copy(const T& s) +{ + return ltrim_copy( rtrim_copy(s) ); } } #endif //OPM_UTILITY_STRING_HPP diff --git a/src/opm/io/eclipse/rst/group.cpp b/src/opm/io/eclipse/rst/group.cpp index b6464a66f..2c9fa22be 100644 --- a/src/opm/io/eclipse/rst/group.cpp +++ b/src/opm/io/eclipse/rst/group.cpp @@ -33,7 +33,7 @@ RstGroup::RstGroup(const std::string* zwel, const int *, const float * sgrp, const double * xgrp) : - name(trim_copy(zwel[0])), + name(rtrim_copy(zwel[0])), oil_rate_limit(sgrp[VI::SGroup::OilRateLimit]), water_rate_limit(sgrp[VI::SGroup::WatRateLimit]), gas_rate_limit(sgrp[VI::SGroup::GasRateLimit]), diff --git a/src/opm/io/eclipse/rst/well.cpp b/src/opm/io/eclipse/rst/well.cpp index 190067353..1913a614f 100644 --- a/src/opm/io/eclipse/rst/well.cpp +++ b/src/opm/io/eclipse/rst/well.cpp @@ -41,7 +41,7 @@ RstWell::RstWell(const RstHeader& header, const int * icon, const float * scon, const double * xcon) : - name(trim_copy(zwel[0])), + name(rtrim_copy(zwel[0])), group(group_arg), ij({iwel[VI::IWell::IHead] - 1, iwel[VI::IWell::JHead] - 1}), k1k2(std::make_pair(iwel[VI::IWell::FirstK] - 1, iwel[VI::IWell::LastK] - 1)), diff --git a/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp b/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp index b38139aaa..9db85f6e4 100644 --- a/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp +++ b/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp @@ -23,10 +23,9 @@ #include #include -#include - #include +#include #include #include #include @@ -96,7 +95,7 @@ namespace { */ std::string trim_wgname(const DeckKeyword& keyword, const std::string& wgname_arg, const ParseContext& parseContext, ErrorGuard errors) { - std::string wgname = boost::algorithm::trim_copy(wgname_arg); + std::string wgname = trim_copy(wgname_arg); if (wgname != wgname_arg) { const auto& location = keyword.location(); std::string msg = "Illegal space: \"" + wgname_arg + "\" found when defining WELL/GROUP in keyword: " + keyword.name() + " at " + location.filename + ":" + std::to_string(location.lineno); diff --git a/tests/parser/StringTests.cpp b/tests/parser/StringTests.cpp index 2c12f605d..50978ab2e 100644 --- a/tests/parser/StringTests.cpp +++ b/tests/parser/StringTests.cpp @@ -181,3 +181,35 @@ BOOST_AUTO_TEST_CASE(strncmp_function) { BOOST_CHECK_EQUAL( view.find('X'), std::string::npos); BOOST_CHECK_EQUAL( view.find('D'), 9); } + + + +BOOST_AUTO_TEST_CASE(trim) { + std::string s1 = "ABC"; + std::string s2 = " ABC"; + std::string s3 = "ABC "; + std::string s4 = " ABC "; + std::string s5 = ""; + std::string s6 = " "; + + BOOST_CHECK_EQUAL(trim_copy(s1) , s1); + BOOST_CHECK_EQUAL(trim_copy(s2) , s1); + BOOST_CHECK_EQUAL(trim_copy(s3) , s1); + BOOST_CHECK_EQUAL(trim_copy(s4) , s1); + BOOST_CHECK_EQUAL(trim_copy(s5) , s5); + BOOST_CHECK_EQUAL(trim_copy(s6) , s5); + + BOOST_CHECK_EQUAL(ltrim_copy(s1) , s1); + BOOST_CHECK_EQUAL(ltrim_copy(s2) , s1); + BOOST_CHECK_EQUAL(ltrim_copy(s3) , s3); + BOOST_CHECK_EQUAL(ltrim_copy(s4) , s3); + BOOST_CHECK_EQUAL(ltrim_copy(s5) , s5); + BOOST_CHECK_EQUAL(ltrim_copy(s6) , s5); + + BOOST_CHECK_EQUAL(rtrim_copy(s1) , s1); + BOOST_CHECK_EQUAL(rtrim_copy(s2) , s2); + BOOST_CHECK_EQUAL(rtrim_copy(s3) , s1); + BOOST_CHECK_EQUAL(rtrim_copy(s4) , s2); + BOOST_CHECK_EQUAL(rtrim_copy(s5) , s5); + BOOST_CHECK_EQUAL(rtrim_copy(s6) , s5); +}