diff --git a/applications/test/string/Test-string.C b/applications/test/string/Test-string.C
index 208e1c297f..d660a36240 100644
--- a/applications/test/string/Test-string.C
+++ b/applications/test/string/Test-string.C
@@ -83,7 +83,8 @@ int main(int argc, char *argv[])
Info<<"camel-case => " << (word("camel") & "case") << nl;
for (const auto& s : { " text with \"spaces'", "08/15 value" })
{
- Info<<"validated \"" << s << "\" => " << word::validated(s) << nl;
+ Info<<"validated \"" << s << "\" => "
+ << word::validated(s, true) << nl;
}
Info<< nl;
diff --git a/applications/test/stringSplit/Make/files b/applications/test/stringSplit/Make/files
new file mode 100644
index 0000000000..06bdafe1b2
--- /dev/null
+++ b/applications/test/stringSplit/Make/files
@@ -0,0 +1,3 @@
+Test-stringSplit.C
+
+EXE = $(FOAM_USER_APPBIN)/Test-stringSplit
diff --git a/applications/test/stringSplit/Make/options b/applications/test/stringSplit/Make/options
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/applications/test/stringSplit/Test-stringSplit.C b/applications/test/stringSplit/Test-stringSplit.C
new file mode 100644
index 0000000000..9b1208c252
--- /dev/null
+++ b/applications/test/stringSplit/Test-stringSplit.C
@@ -0,0 +1,81 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2017 OpenCFD Ltd.
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+Application
+ Test-stringSplit
+
+Description
+ Test string splitting
+
+\*---------------------------------------------------------------------------*/
+
+#include "argList.H"
+#include "fileName.H"
+#include "stringOps.H"
+
+using namespace Foam;
+
+template
+void printSplitting(const String& str, const char delimiter)
+{
+ auto split = stringOps::split(str, delimiter);
+
+ Info<< "string {" << str.size() << " chars} = " << str << nl
+ << split.size() << " elements {" << split.length() << " chars}"
+ << nl;
+
+ unsigned i = 0;
+ for (const auto s : split)
+ {
+ Info<< "[" << i++ << "] {" << s.length() << " chars} = "
+ << s.str() << nl;
+ }
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+// Main program:
+
+int main(int argc, char *argv[])
+{
+ argList::noBanner();
+ argList::noParallel();
+
+ argList args(argc, argv, false, true);
+
+ if (args.size() <= 1 && args.options().empty())
+ {
+ args.printUsage();
+ }
+
+ for (label argi=1; argi < args.size(); ++argi)
+ {
+ printSplitting(args[argi], '/');
+ }
+
+ Info<< "\nEnd\n" << endl;
+ return 0;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L b/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L
index ca276a0348..8898cded2c 100644
--- a/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L
+++ b/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L
@@ -221,6 +221,7 @@ redundantBlock {space}({comment}|{unknownPeriodicFace}|{periodicFace
endOfSection {space}")"{space}
+/* balance "-quoted for editor */
/* ------------------------------------------------------------------------ *\
----- Exclusive start states -----
@@ -693,7 +694,7 @@ endOfSection {space}")"{space}
{lbrac}{label} {
Warning
<< "Found unknown block of type: "
- << Foam::string(YYText())(1, YYLeng()-1) << nl
+ << std::string(YYText()).substr(1, YYLeng()-1) << nl
<< " on line " << lineNo << endl;
yy_push_state(ignoreBlock);
diff --git a/applications/utilities/mesh/manipulation/setSet/setSet.C b/applications/utilities/mesh/manipulation/setSet/setSet.C
index 4a64e6f801..2f5b6a5cca 100644
--- a/applications/utilities/mesh/manipulation/setSet/setSet.C
+++ b/applications/utilities/mesh/manipulation/setSet/setSet.C
@@ -903,10 +903,10 @@ int main(int argc, char *argv[])
}
// Strip off anything after #
- string::size_type i = rawLine.find_first_of("#");
+ string::size_type i = rawLine.find('#');
if (i != string::npos)
{
- rawLine = rawLine(0, i);
+ rawLine.resize(i);
}
if (rawLine.empty())
diff --git a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
index ea80da840f..f9be71c75f 100644
--- a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
+++ b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
@@ -254,7 +254,7 @@ bool merge
if (key[0] == '~')
{
- word eraseKey = key(1, key.size()-1);
+ const word eraseKey = key.substr(1);
if (thisDict.remove(eraseKey))
{
// Mark thisDict entry as having been match for wildcard
@@ -325,7 +325,7 @@ bool merge
if (key[0] == '~')
{
- word eraseKey = key(1, key.size()-1);
+ const word eraseKey = key.substr(1);
// List of indices into thisKeys
labelList matches
diff --git a/src/OSspecific/POSIX/POSIX.C b/src/OSspecific/POSIX/POSIX.C
index d9b2e0b3a4..3a922ed016 100644
--- a/src/OSspecific/POSIX/POSIX.C
+++ b/src/OSspecific/POSIX/POSIX.C
@@ -88,7 +88,7 @@ static inline bool isBackupName(const Foam::fileName& name)
{
return false;
}
- else if (name[name.size()-1] == '~')
+ else if (name.back() == '~')
{
return true;
}
diff --git a/src/OSspecific/POSIX/printStack.C b/src/OSspecific/POSIX/printStack.C
index bee02686b3..4031b91d77 100644
--- a/src/OSspecific/POSIX/printStack.C
+++ b/src/OSspecific/POSIX/printStack.C
@@ -40,12 +40,11 @@ namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-string pOpen(const string &cmd, label line=0)
+string pOpen(const string& cmd, label line=0)
{
- string res = "\n";
+ string res;
FILE *cmdPipe = popen(cmd.c_str(), "r");
-
if (cmdPipe)
{
char *buf = nullptr;
@@ -54,8 +53,7 @@ string pOpen(const string &cmd, label line=0)
for (label cnt = 0; cnt <= line; cnt++)
{
size_t linecap = 0;
- ssize_t linelen;
- linelen = ::getline(&buf, &linecap, cmdPipe);
+ ssize_t linelen = ::getline(&buf, &linecap, cmdPipe);
if (linelen < 0)
{
@@ -65,6 +63,11 @@ string pOpen(const string &cmd, label line=0)
if (cnt == line)
{
res = string(buf);
+ // Trim trailing newline
+ if (res.size())
+ {
+ res.resize(res.size()-1);
+ }
break;
}
}
@@ -77,7 +80,7 @@ string pOpen(const string &cmd, label line=0)
pclose(cmdPipe);
}
- return res.substr(0, res.size() - 1);
+ return res;
}
diff --git a/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.C b/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.C
index 7bd031d87a..4d809900b9 100644
--- a/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.C
+++ b/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.C
@@ -604,13 +604,14 @@ Foam::Istream& Foam::ISstream::readVariable(string& str)
// Read, counting brackets
buf[nChar++] = c;
+ // Also allow '/' between ${...} blocks for slash-scoping of entries
while
(
get(c)
&& (
c == token::BEGIN_BLOCK
|| c == token::END_BLOCK
- || word::valid(c)
+ || word::valid(c) || c == '/'
)
)
{
@@ -620,7 +621,7 @@ Foam::Istream& Foam::ISstream::readVariable(string& str)
buf[errLen] = '\0';
FatalIOErrorInFunction(*this)
- << "word '" << buf << "...'\n"
+ << "variable '" << buf << "...'\n"
<< " is too long (max. " << maxLen << " characters)"
<< exit(FatalIOError);
@@ -656,7 +657,7 @@ Foam::Istream& Foam::ISstream::readVariable(string& str)
buf[errLen] = '\0';
FatalIOErrorInFunction(*this)
- << "word '" << buf << "...'\n"
+ << "variable '" << buf << "...'\n"
<< " is too long (max. " << maxLen << " characters)"
<< exit(FatalIOError);
diff --git a/src/OpenFOAM/db/dictionary/dictionaryIO.C b/src/OpenFOAM/db/dictionary/dictionaryIO.C
index 836add62f9..f1605e50fa 100644
--- a/src/OpenFOAM/db/dictionary/dictionaryIO.C
+++ b/src/OpenFOAM/db/dictionary/dictionaryIO.C
@@ -130,7 +130,7 @@ bool Foam::dictionary::read(Istream& is)
bool Foam::dictionary::substituteKeyword(const word& keyword, bool mergeEntry)
{
- const word varName = keyword(1, keyword.size()-1);
+ const word varName = keyword.substr(1);
// Lookup the variable name in the given dictionary
const entry* ePtr = lookupEntryPtr(varName, true, true);
diff --git a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C
index 397262386b..37db0a3067 100644
--- a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C
+++ b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C
@@ -210,7 +210,7 @@ bool Foam::functionObjectList::readFunctionObject
{
if (argLevel == 0)
{
- funcName = funcNameArgs(start, i - start);
+ funcName = funcNameArgs.substr(start, i - start);
start = i+1;
}
++argLevel;
@@ -226,7 +226,7 @@ bool Foam::functionObjectList::readFunctionObject
Tuple2
(
argName,
- funcNameArgs(start, i - start)
+ funcNameArgs.substr(start, i - start)
)
);
namedArg = false;
@@ -235,7 +235,10 @@ bool Foam::functionObjectList::readFunctionObject
{
args.append
(
- string::validate(funcNameArgs(start, i - start))
+ string::validate
+ (
+ funcNameArgs.substr(start, i - start)
+ )
);
}
start = i+1;
@@ -252,7 +255,11 @@ bool Foam::functionObjectList::readFunctionObject
}
else if (c == '=')
{
- argName = string::validate(funcNameArgs(start, i - start));
+ argName = string::validate
+ (
+ funcNameArgs.substr(start, i - start)
+ );
+
start = i+1;
namedArg = true;
}
diff --git a/src/OpenFOAM/dimensionSet/dimensionSetIO.C b/src/OpenFOAM/dimensionSet/dimensionSetIO.C
index 768acc8efc..032555cd25 100644
--- a/src/OpenFOAM/dimensionSet/dimensionSetIO.C
+++ b/src/OpenFOAM/dimensionSet/dimensionSetIO.C
@@ -140,7 +140,7 @@ void Foam::dimensionSet::tokeniser::splitWord(const word& w)
{
if (i > start)
{
- word subWord = w(start, i-start);
+ const word subWord = w.substr(start, i-start);
if (isdigit(subWord[0]) || subWord[0] == token::SUBTRACT)
{
push(token(readScalar(IStringStream(subWord)())));
@@ -166,7 +166,7 @@ void Foam::dimensionSet::tokeniser::splitWord(const word& w)
}
if (start < w.size())
{
- word subWord = w(start, w.size()-start);
+ const word subWord = w.substr(start);
if (isdigit(subWord[0]) || subWord[0] == token::SUBTRACT)
{
push(token(readScalar(IStringStream(subWord)())));
@@ -524,9 +524,9 @@ Foam::Istream& Foam::dimensionSet::read
do
{
word symbolPow = nextToken.wordToken();
- if (symbolPow[symbolPow.size()-1] == token::END_SQR)
+ if (symbolPow.back() == token::END_SQR)
{
- symbolPow = symbolPow(0, symbolPow.size()-1);
+ symbolPow.resize(symbolPow.size()-1);
continueParsing = false;
}
@@ -537,8 +537,8 @@ Foam::Istream& Foam::dimensionSet::read
size_t index = symbolPow.find('^');
if (index != string::npos)
{
- word symbol = symbolPow(0, index);
- word exp = symbolPow(index+1, symbolPow.size()-index+1);
+ const word symbol = symbolPow.substr(0, index);
+ const word exp = symbolPow.substr(index+1);
scalar exponent = readScalar(IStringStream(exp)());
dimensionedScalar s;
@@ -580,9 +580,9 @@ Foam::Istream& Foam::dimensionSet::read
{
// Read first five dimensions
exponents_[dimensionSet::MASS] = nextToken.number();
- for (int Dimension=1; Dimension> exponents_[Dimension];
+ is >> exponents_[d];
}
// Read next token
diff --git a/src/OpenFOAM/matrices/solution/solution.C b/src/OpenFOAM/matrices/solution/solution.C
index 5abac0fa3e..982c3398b6 100644
--- a/src/OpenFOAM/matrices/solution/solution.C
+++ b/src/OpenFOAM/matrices/solution/solution.C
@@ -76,16 +76,13 @@ void Foam::solution::read(const dictionary& dict)
const word& e = entryNames[i];
scalar value = readScalar(relaxDict.lookup(e));
- if (e(0, 1) == "p")
+ if (e.startsWith("p"))
{
fieldRelaxDict_.add(e, value);
}
- else if (e.length() >= 3)
+ else if (e.startsWith("rho"))
{
- if (e(0, 3) == "rho")
- {
- fieldRelaxDict_.add(e, value);
- }
+ fieldRelaxDict_.add(e, value);
}
}
diff --git a/src/OpenFOAM/primitives/strings/lists/SubStrings.H b/src/OpenFOAM/primitives/strings/lists/SubStrings.H
new file mode 100644
index 0000000000..3e37fd7edd
--- /dev/null
+++ b/src/OpenFOAM/primitives/strings/lists/SubStrings.H
@@ -0,0 +1,127 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2017 OpenCFD Ltd.
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+Class
+ Foam::SubStrings
+
+Description
+ Sub-ranges of a string with a structure similar to std::match_results,
+ but without the underlying regular expression matching.
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef SubStrings_H
+#define SubStrings_H
+
+#include
+#include
+#include
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class SubStrings Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class SubStrings
+:
+ public std::vector>
+{
+public:
+
+ // Typedefs
+
+ //- The element type
+ using value_type =
+ typename std::sub_match;
+
+ //- The const_iterator for the underlying string type
+ using string_iterator = typename String::const_iterator;
+
+
+ // Constructors
+
+ //- Construct null
+ SubStrings()
+ {}
+
+
+ // Member Functions
+
+ //- The total length of all sub-elements.
+ // Use size() for the number elements.
+ std::string::size_type length() const
+ {
+ std::string::size_type len = 0;
+
+ for (const auto& elem : *this)
+ {
+ len += elem.length();
+ }
+
+ return len;
+ }
+
+
+ //- Append sub-string defined by begin/end iterators
+ void append(string_iterator b, string_iterator e)
+ {
+ value_type range;
+ range.first = b;
+ range.second = e;
+ range.matched = true;
+
+ this->push_back(range);
+ }
+
+
+ //- Const reference to the first element,
+ // for consistency with other OpenFOAM containers
+ auto first() const -> decltype(this->front())
+ {
+ return this->front();
+ }
+
+
+ //- Const reference to the last element,
+ // for consistency with other OpenFOAM containers
+ auto last() const -> decltype(this->back())
+ {
+ return this->back();
+ }
+
+};
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/primitives/strings/stringOps/stringOps.H b/src/OpenFOAM/primitives/strings/stringOps/stringOps.H
index 66e87623e5..0d7d459f59 100644
--- a/src/OpenFOAM/primitives/strings/stringOps/stringOps.H
+++ b/src/OpenFOAM/primitives/strings/stringOps/stringOps.H
@@ -30,12 +30,14 @@ Description
SourceFiles
stringOps.C
+ stringOpsTemplates.C
\*---------------------------------------------------------------------------*/
#ifndef stringOps_H
#define stringOps_H
#include "string.H"
+#include "SubStrings.H"
#include "word.H"
#include "dictionary.H"
#include "HashTable.H"
@@ -302,14 +304,21 @@ namespace stringOps
Foam::word name(const std::string& fmt, const PrimitiveType& val);
-} // End namespace stringOps
+ //- Split a string into sub-strings at the delimiter character.
+ // An empty sub-strings are suppressed.
+ template
+ Foam::SubStrings split
+ (
+ const StringType& str,
+ const char delimiter
+ );
+} // End namespace stringOps
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
-
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
diff --git a/src/OpenFOAM/primitives/strings/stringOps/stringOpsTemplates.C b/src/OpenFOAM/primitives/strings/stringOps/stringOpsTemplates.C
index a8f7030300..1b0aa62e9f 100644
--- a/src/OpenFOAM/primitives/strings/stringOps/stringOpsTemplates.C
+++ b/src/OpenFOAM/primitives/strings/stringOps/stringOpsTemplates.C
@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
- \\ / A nd | Copyright (C) 2016 OpenCFD Ltd.
+ \\ / A nd | Copyright (C) 2016-2017 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@@ -65,4 +65,36 @@ Foam::word Foam::stringOps::name
}
+template
+Foam::SubStrings Foam::stringOps::split
+(
+ const StringType& str,
+ const char delimiter
+)
+{
+ Foam::SubStrings lst;
+ lst.reserve(20);
+
+ std::string::size_type beg = 0, end = 0;
+
+ while ((end = str.find(delimiter, beg)) != std::string::npos)
+ {
+ if (beg < end)
+ {
+ // (Non-empty) intermediate element
+ lst.append(str.cbegin() + beg, str.cbegin() + end);
+ }
+ beg = end + 1;
+ }
+
+ // (Non-empty) trailing element
+ if (beg < str.size())
+ {
+ lst.append(str.cbegin() + beg, str.cbegin() + str.size());
+ }
+
+ return lst;
+}
+
+
// ************************************************************************* //
diff --git a/src/OpenFOAM/primitives/strings/word/word.H b/src/OpenFOAM/primitives/strings/word/word.H
index 0661255341..126d5c08c7 100644
--- a/src/OpenFOAM/primitives/strings/word/word.H
+++ b/src/OpenFOAM/primitives/strings/word/word.H
@@ -113,9 +113,9 @@ public:
inline static bool valid(char c);
//- Construct a validated word, in which all invalid characters have
- // been stripped out. Normally also prefix any leading digit
+ // been stripped out. Optionally prefix any leading digit
// with '_' to have words that work nicely as dictionary keywords.
- static word validated(const std::string& s, const bool prefix=true);
+ static word validated(const std::string& s, const bool prefix=false);
// File-like functions
diff --git a/src/combustionModels/FSD/reactionRateFlameAreaModels/reactionRateFlameArea/reactionRateFlameAreaNew.C b/src/combustionModels/FSD/reactionRateFlameAreaModels/reactionRateFlameArea/reactionRateFlameAreaNew.C
index 2154d2cc94..83222a222b 100644
--- a/src/combustionModels/FSD/reactionRateFlameAreaModels/reactionRateFlameArea/reactionRateFlameAreaNew.C
+++ b/src/combustionModels/FSD/reactionRateFlameAreaModels/reactionRateFlameArea/reactionRateFlameAreaNew.C
@@ -34,16 +34,15 @@ Foam::autoPtr Foam::reactionRateFlameArea::New
const combustionModel& combModel
)
{
- word reactionRateFlameAreaType
+ const word modelType
(
dict.lookup("reactionRateFlameArea")
);
Info<< "Selecting reaction rate flame area correlation "
- << reactionRateFlameAreaType << endl;
+ << modelType << endl;
- auto cstrIter =
- dictionaryConstructorTablePtr_->cfind(reactionRateFlameAreaType);
+ auto cstrIter = dictionaryConstructorTablePtr_->cfind(modelType);
if (!cstrIter.found())
{
@@ -51,15 +50,13 @@ Foam::autoPtr Foam::reactionRateFlameArea::New
(
dict
) << "Unknown reactionRateFlameArea type "
- << reactionRateFlameAreaType << nl << nl
+ << modelType << nl << nl
<< "Valid reaction rate flame area types :" << endl
<< dictionaryConstructorTablePtr_->sortedToc()
<< exit(FatalIOError);
}
- const label tempOpen = reactionRateFlameAreaType.find('<');
-
- const word className = reactionRateFlameAreaType(0, tempOpen);
+ const word className = modelType.substr(0, modelType.find('<'));
return autoPtr
(cstrIter()(className, dict, mesh, combModel));
diff --git a/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModelNew.C b/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModelNew.C
index ca7d0616b8..50e69d177d 100644
--- a/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModelNew.C
+++ b/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModelNew.C
@@ -35,7 +35,7 @@ Foam::combustionModels::psiCombustionModel::New
const word& phaseName
)
{
- const word combModelName
+ const word modelType
(
IOdictionary
(
@@ -51,21 +51,21 @@ Foam::combustionModels::psiCombustionModel::New
).lookup("combustionModel")
);
- Info<< "Selecting combustion model " << combModelName << endl;
+ Info<< "Selecting combustion model " << modelType << endl;
- auto cstrIter = dictionaryConstructorTablePtr_->cfind(combModelName);
+ auto cstrIter = dictionaryConstructorTablePtr_->cfind(modelType);
if (!cstrIter.found())
{
FatalErrorInFunction
<< "Unknown psiCombustionModel type "
- << combModelName << endl << endl
- << "Valid combustionModel types :" << endl
+ << modelType << nl << nl
+ << "Valid combustionModel types :" << nl
<< dictionaryConstructorTablePtr_->sortedToc()
<< exit(FatalError);
}
- const word className = combModelName(0, combModelName.find('<'));
+ const word className = modelType.substr(0, modelType.find('<'));
return autoPtr
(
diff --git a/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModelNew.C b/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModelNew.C
index f6ffadc0b6..fb03177606 100644
--- a/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModelNew.C
+++ b/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModelNew.C
@@ -35,7 +35,7 @@ Foam::combustionModels::rhoCombustionModel::New
const word& phaseName
)
{
- const word combTypeName
+ const word modelType
(
IOdictionary
(
@@ -51,23 +51,21 @@ Foam::combustionModels::rhoCombustionModel::New
).lookup("combustionModel")
);
- Info<< "Selecting combustion model " << combTypeName << endl;
+ Info<< "Selecting combustion model " << modelType << endl;
- auto cstrIter = dictionaryConstructorTablePtr_->cfind(combTypeName);
+ auto cstrIter = dictionaryConstructorTablePtr_->cfind(modelType);
if (!cstrIter.found())
{
FatalErrorInFunction
<< "Unknown rhoCombustionModel type "
- << combTypeName << endl << endl
- << "Valid combustionModel types :" << endl
+ << modelType << nl << nl
+ << "Valid combustionModel types :" << nl
<< dictionaryConstructorTablePtr_->sortedToc()
<< exit(FatalError);
}
- const label tempOpen = combTypeName.find('<');
-
- const word className = combTypeName(0, tempOpen);
+ const word className = modelType.substr(0, modelType.find('<'));
return autoPtr
(
diff --git a/src/conversion/ccm/reader/ccmReader.C b/src/conversion/ccm/reader/ccmReader.C
index 9b16f943bf..302e89981d 100644
--- a/src/conversion/ccm/reader/ccmReader.C
+++ b/src/conversion/ccm/reader/ccmReader.C
@@ -365,7 +365,7 @@ void Foam::ccm::reader::readProblemDescription_boundaryRegion
}
else
{
- dict.add(opt, word::validated(str));
+ dict.add(opt, word::validated(str, true));
}
}
@@ -407,7 +407,7 @@ void Foam::ccm::reader::readProblemDescription_boundaryRegion
if (!str.empty())
{
- dict.add(opt, word::validated(str));
+ dict.add(opt, word::validated(str, true));
}
}
@@ -472,7 +472,7 @@ void Foam::ccm::reader::readProblemDescription_cellTable
str = "zone_" + ::Foam::name(Id);
}
- dict.add(opt, word::validated(str));
+ dict.add(opt, word::validated(str, true));
}
@@ -484,7 +484,7 @@ void Foam::ccm::reader::readProblemDescription_cellTable
if (!str.empty())
{
- dict.add(opt, word::validated(str));
+ dict.add(opt, word::validated(str, true));
}
}
diff --git a/src/conversion/fire/FIREMeshReader.C b/src/conversion/fire/FIREMeshReader.C
index 9202723531..df5ee05ef7 100644
--- a/src/conversion/fire/FIREMeshReader.C
+++ b/src/conversion/fire/FIREMeshReader.C
@@ -155,7 +155,7 @@ void Foam::fileFormats::FIREMeshReader::readSelections(ISstream& is)
// index starting at 1
const label selId = ++nCellSelections;
- cellTable_.setName(selId, word::validated(name));
+ cellTable_.setName(selId, word::validated(name, true));
cellTable_.setMaterial(selId, "fluid");
for (label i = 0; i < count; ++i)
@@ -170,7 +170,7 @@ void Foam::fileFormats::FIREMeshReader::readSelections(ISstream& is)
// index starting at 0
const label selId = nFaceSelections++;
- faceNames.append(word::validated(name));
+ faceNames.append(word::validated(name, true));
for (label i = 0; i < count; ++i)
{
diff --git a/src/meshTools/edgeMesh/edgeMeshFormats/nas/NASedgeFormat.C b/src/meshTools/edgeMesh/edgeMeshFormats/nas/NASedgeFormat.C
index 7bd0acab4f..7bcc2d3243 100644
--- a/src/meshTools/edgeMesh/edgeMeshFormats/nas/NASedgeFormat.C
+++ b/src/meshTools/edgeMesh/edgeMeshFormats/nas/NASedgeFormat.C
@@ -74,7 +74,7 @@ bool Foam::fileFormats::NASedgeFormat::read
// Check if character 72 is continuation
if (line.size() > 72 && line[72] == '+')
{
- line = line.substr(0, 72);
+ line.resize(72);
while (true)
{
@@ -87,7 +87,7 @@ bool Foam::fileFormats::NASedgeFormat::read
}
else
{
- line += buf.substr(8, buf.size()-8);
+ line += buf.substr(8);
break;
}
}
diff --git a/src/meshTools/edgeMesh/edgeMeshFormats/obj/OBJedgeFormat.C b/src/meshTools/edgeMesh/edgeMeshFormats/obj/OBJedgeFormat.C
index 1261b971cf..e0af5e0e76 100644
--- a/src/meshTools/edgeMesh/edgeMeshFormats/obj/OBJedgeFormat.C
+++ b/src/meshTools/edgeMesh/edgeMeshFormats/obj/OBJedgeFormat.C
@@ -117,9 +117,9 @@ bool Foam::fileFormats::OBJedgeFormat::read(const fileName& filename)
string line = this->getLineNoComment(is);
// handle continuations
- if (line[line.size()-1] == '\\')
+ if (line.back() == '\\')
{
- line.substr(0, line.size()-1);
+ line.resize(line.size()-1);
line += this->getLineNoComment(is);
}
diff --git a/src/regionModels/thermalBaffleModels/derivedFvPatchFields/thermalBaffle/thermalBaffleFvPatchScalarField.C b/src/regionModels/thermalBaffleModels/derivedFvPatchFields/thermalBaffle/thermalBaffleFvPatchScalarField.C
index ca1f1511c0..58f7840398 100644
--- a/src/regionModels/thermalBaffleModels/derivedFvPatchFields/thermalBaffle/thermalBaffleFvPatchScalarField.C
+++ b/src/regionModels/thermalBaffleModels/derivedFvPatchFields/thermalBaffle/thermalBaffleFvPatchScalarField.C
@@ -191,9 +191,8 @@ void thermalBaffleFvPatchScalarField::createPatchMesh()
dicts[bottomPatchID].add("inGroups", inGroups);
dicts[bottomPatchID].add("sampleMode", mpp.sampleModeNames_[mpp.mode()]);
- const label sepPos = coupleGroup.find('_');
-
- const word coupleGroupSlave = coupleGroup(0, sepPos) + "_slave";
+ const word coupleGroupSlave =
+ coupleGroup.substr(0, coupleGroup.find('_')) + "_slave";
inGroups[0] = coupleGroupSlave;
dicts[topPatchID].add("coupleGroup", coupleGroupSlave);
diff --git a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C
index 2c21271939..38a51d6141 100644
--- a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C
+++ b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C
@@ -186,7 +186,7 @@ void Foam::ensightSurfaceReader::readCase(IFstream& is)
// surfaceName.****.fieldName
// This is not parser friendly - simply take remainder of buffer
label iPos = iss.stdStream().tellg();
- fieldFileName = buffer(iPos, buffer.size() - iPos);
+ fieldFileName = buffer.substr(iPos);
size_t p0 = fieldFileName.find_first_not_of(' ');
if (p0 == string::npos)
{
diff --git a/src/surfMesh/surfaceFormats/nas/NASsurfaceFormat.C b/src/surfMesh/surfaceFormats/nas/NASsurfaceFormat.C
index 7f64549e9c..3bcc035188 100644
--- a/src/surfMesh/surfaceFormats/nas/NASsurfaceFormat.C
+++ b/src/surfMesh/surfaceFormats/nas/NASsurfaceFormat.C
@@ -89,12 +89,12 @@ bool Foam::fileFormats::NASsurfaceFormat::read
string line;
is.getLine(line);
- // Ansa extension
- if (line.substr(0, 10) == "$ANSA_NAME")
+ // ANSA extension
+ if (line.startsWith("$ANSA_NAME"))
{
- string::size_type sem0 = line.find (';', 0);
- string::size_type sem1 = line.find (';', sem0+1);
- string::size_type sem2 = line.find (';', sem1+1);
+ string::size_type sem0 = line.find(';', 0);
+ string::size_type sem1 = line.find(';', sem0+1);
+ string::size_type sem2 = line.find(';', sem1+1);
if
(
@@ -111,14 +111,11 @@ bool Foam::fileFormats::NASsurfaceFormat::read
string rawName;
is.getLine(rawName);
- if (rawName[rawName.size()-1] == '\r')
+ if (rawName.back() == '\r')
{
- rawName = rawName.substr(1, rawName.size()-2);
- }
- else
- {
- rawName = rawName.substr(1, rawName.size()-1);
+ rawName.resize(rawName.size()-1);
}
+ rawName = rawName.substr(1);
string::stripInvalid(rawName);
ansaName = rawName;
@@ -132,11 +129,7 @@ bool Foam::fileFormats::NASsurfaceFormat::read
// Hypermesh extension
// $HMNAME COMP 1"partName"
- if
- (
- line.substr(0, 12) == "$HMNAME COMP"
- && line.find ('"') != string::npos
- )
+ if (line.startsWith("$HMNAME COMP") && line.find('"') != string::npos)
{
label groupId = readLabel
(
@@ -165,7 +158,7 @@ bool Foam::fileFormats::NASsurfaceFormat::read
// Check if character 72 is continuation
if (line.size() > 72 && line[72] == '+')
{
- line = line.substr(0, 72);
+ line.resize(72);
while (true)
{
@@ -178,7 +171,7 @@ bool Foam::fileFormats::NASsurfaceFormat::read
}
else
{
- line += buf.substr(8, buf.size()-8);
+ line += buf.substr(8);
break;
}
}
diff --git a/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.C b/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.C
index 708f7654e9..692f2ee3bc 100644
--- a/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.C
+++ b/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.C
@@ -82,9 +82,9 @@ bool Foam::fileFormats::OBJsurfaceFormat::read
string line = this->getLineNoComment(is);
// handle continuations
- if (line[line.size()-1] == '\\')
+ if (line.back() == '\\')
{
- line.substr(0, line.size()-1);
+ line.resize(line.size()-1);
line += this->getLineNoComment(is);
}
diff --git a/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormatCore.C b/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormatCore.C
index 71b3751c8c..7443771812 100644
--- a/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormatCore.C
+++ b/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormatCore.C
@@ -64,7 +64,7 @@ Foam::fileFormats::STARCDsurfaceFormatCore::readInpCellTable
if (ctnameRE.match(line, groups))
{
const label tableId = atoi(groups[0].c_str());
- const word tableName = word::validated(groups[1]);
+ const word tableName = word::validated(groups[1], true);
if (!tableName.empty())
{
diff --git a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatCore.C b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatCore.C
index 97b4112f9b..385ad872ab 100644
--- a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatCore.C
+++ b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatCore.C
@@ -87,9 +87,9 @@ bool Foam::fileFormats::TRIsurfaceFormatCore::read
string line = this->getLineNoComment(is);
// handle continuations ?
- // if (line[line.size()-1] == '\\')
+ // if (line.back() == '\\')
// {
- // line.substr(0, line.size()-1);
+ // line.resize(line.size()-1);
// line += this->getLineNoComment(is);
// }
@@ -128,14 +128,14 @@ bool Foam::fileFormats::TRIsurfaceFormatCore::read
// ie, instead of having 0xFF, skip 0 and leave xFF to
// get read as a word and name it "zoneFF"
- char zero;
- lineStream >> zero;
+ char zeroChar;
+ lineStream >> zeroChar;
- word rawName(lineStream);
- word name("zone" + rawName(1, rawName.size()-1));
+ const word rawName(lineStream);
+ const word name("zone" + rawName.substr(1));
- HashTable