ENH: implement stringOps - trim, trimRight, inplaceTrim, inplaceTrimRight

This commit is contained in:
Mark Olesen
2011-02-23 10:13:10 +01:00
parent b7429ef5c4
commit 71d21f6de4
2 changed files with 44 additions and 11 deletions

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -26,6 +26,7 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "string.H" #include "string.H"
#include "stringOps.H"
#include "IOstreams.H" #include "IOstreams.H"
using namespace Foam; using namespace Foam;
@ -35,11 +36,19 @@ using namespace Foam;
int main(int argc, char *argv[]) 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:" Info<< "string:" << test << nl << "hash:"
<< unsigned(string::hash()(test)) << endl; << 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 // test sub-strings via iterators
string::const_iterator iter = test.end(); string::const_iterator iter = test.end();
string::const_iterator iter2 = test.end(); string::const_iterator iter2 = test.end();

View File

@ -36,8 +36,8 @@ Foam::string Foam::stringOps::expand
const char sigil const char sigil
) )
{ {
string str(original); string s(original);
return inplaceExpand(str, mapping); return inplaceExpand(s, mapping);
} }
@ -137,8 +137,8 @@ Foam::string Foam::stringOps::expandEnv
const bool allowEmptyVar const bool allowEmptyVar
) )
{ {
string str(original); string s(original);
return inplaceExpandEnv(str, recurse, allowEmptyVar); return inplaceExpandEnv(s, recurse, allowEmptyVar);
} }
@ -331,28 +331,52 @@ Foam::string& Foam::stringOps::inplaceTrimLeft(string& s)
Foam::string Foam::stringOps::trimRight(const 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; return s;
} }
Foam::string& Foam::stringOps::inplaceTrimRight(string& 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; return s;
} }
Foam::string Foam::stringOps::trim(const string& original) Foam::string Foam::stringOps::trim(const string& original)
{ {
notImplemented("string stringOps::trim(const string&)"); return trimLeft(trimRight(original));
return original;
} }
Foam::string& Foam::stringOps::inplaceTrim(string& s) Foam::string& Foam::stringOps::inplaceTrim(string& s)
{ {
notImplemented("string& stringOps::inplaceTrim(string&)"); inplaceTrimRight(s);
inplaceTrimLeft(s);
return s; return s;
} }