diff --git a/applications/test/string/Test-string.C b/applications/test/string/Test-string.C index 5a182377df8eb4b9514721a9ab23346fe72b6711..d117f50c41c04b958d1ef13283359d1fe96ce261 100644 --- a/applications/test/string/Test-string.C +++ b/applications/test/string/Test-string.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -26,6 +26,7 @@ Description \*---------------------------------------------------------------------------*/ #include "string.H" +#include "stringOps.H" #include "IOstreams.H" using namespace Foam; @@ -35,11 +36,19 @@ using namespace Foam; int main(int argc, char *argv[]) { - string test("$HOME kjhkjhkjh \" \\$HOME/tyetyery ${FOAM_RUN} \n ; hkjh ;$"); + string test + ( + " $HOME kjhkjhkjh \" \\$HOME/tyetyery ${FOAM_RUN} \n ; hkjh ;$ " + ); Info<< "string:" << test << nl << "hash:" << unsigned(string::hash()(test)) << endl; + Info<<"trimLeft: " << stringOps::trimLeft(test) << endl; + Info<<"trimRight: " << stringOps::trimRight(test) << endl; + Info<<"trim: " << stringOps::trim(test) << endl; + + // test sub-strings via iterators string::const_iterator iter = test.end(); string::const_iterator iter2 = test.end(); diff --git a/src/OpenFOAM/primitives/strings/stringOps/stringOps.C b/src/OpenFOAM/primitives/strings/stringOps/stringOps.C index e3a4d4c8db63dff0bd3a87967ec93ae7930f8544..49142b10ecb598f1771335528ffc8a10dcc05654 100644 --- a/src/OpenFOAM/primitives/strings/stringOps/stringOps.C +++ b/src/OpenFOAM/primitives/strings/stringOps/stringOps.C @@ -36,8 +36,8 @@ Foam::string Foam::stringOps::expand const char sigil ) { - string str(original); - return inplaceExpand(str, mapping); + string s(original); + return inplaceExpand(s, mapping); } @@ -137,8 +137,8 @@ Foam::string Foam::stringOps::expandEnv const bool allowEmptyVar ) { - string str(original); - return inplaceExpandEnv(str, recurse, allowEmptyVar); + string s(original); + return inplaceExpandEnv(s, recurse, allowEmptyVar); } @@ -331,28 +331,52 @@ Foam::string& Foam::stringOps::inplaceTrimLeft(string& s) Foam::string Foam::stringOps::trimRight(const string& s) { - notImplemented("string stringOps::trimRight(const string&)"); + if (!s.empty()) + { + string::size_type sz = s.size(); + while (sz && isspace(s[sz-1])) + { + --sz; + } + + if (sz < s.size()) + { + return s.substr(0, sz); + } + } + return s; } Foam::string& Foam::stringOps::inplaceTrimRight(string& s) { - notImplemented("string& stringOps::inplaceTrimRight(string&)"); + if (!s.empty()) + { + string::size_type sz = s.size(); + while (sz && isspace(s[sz-1])) + { + --sz; + } + + s.resize(sz); + } + return s; } Foam::string Foam::stringOps::trim(const string& original) { - notImplemented("string stringOps::trim(const string&)"); - return original; + return trimLeft(trimRight(original)); } Foam::string& Foam::stringOps::inplaceTrim(string& s) { - notImplemented("string& stringOps::inplaceTrim(string&)"); + inplaceTrimRight(s); + inplaceTrimLeft(s); + return s; }