Add templated method create trimmed copy of string with c_str()

This commit is contained in:
Joakim Hove 2020-01-19 21:09:28 +01:00
parent 1132857324
commit 28d77dacd8
2 changed files with 26 additions and 1 deletions

View File

@ -3,6 +3,7 @@
#include <algorithm>
#include <cctype>
#include <string>
namespace Opm {
@ -19,6 +20,18 @@ typename std::decay< T >::type uppercase( T&& x ) {
return uppercase( t, t );
}
}
template<typename T>
std::string trim_copy(const T& s) {
{
auto ret = std::string(s.c_str());
const auto end = ret.find_last_not_of(" \t\n\r\f\v");
if (end == std::string::npos)
return "";
return ret.substr(0, end + 1);
}
}
}
#endif //OPM_UTILITY_STRING_HPP

View File

@ -3,6 +3,7 @@
#include <boost/test/unit_test.hpp>
#include <opm/io/eclipse/PaddedOutputString.hpp>
#include <opm/parser/eclipse/Utility/String.hpp>
// Convenience alias.
template <std::size_t N>
@ -92,4 +93,15 @@ BOOST_AUTO_TEST_CASE (String_Shortening)
}
}
BOOST_AUTO_TEST_CASE (Trim) {
const auto s1 = PadString<4>{"X"};
BOOST_CHECK_EQUAL(Opm::trim_copy(s1), std::string{"X"});
const auto s2 = PadString<4>{"ABCD"};
BOOST_CHECK_EQUAL(Opm::trim_copy(s2), std::string{"ABCD"});
const auto s3 = PadString<4>{""};
BOOST_CHECK_EQUAL(Opm::trim_copy(s3), std::string{""});
}
BOOST_AUTO_TEST_SUITE_END()