ENH: isLiteral() method for keyType and wordRe

- same as !isPattern(), but can be more readable.

- add wordRe enum state 'UNKNOWN', which has the identical value as
  'DETECT' but used for a return value.
This commit is contained in:
Mark Olesen
2018-10-07 17:28:11 +02:00
parent 87cc19de82
commit 8d6f83e666
10 changed files with 43 additions and 26 deletions

View File

@ -440,7 +440,7 @@ int main(int argc, char *argv[])
{
const wordRes patchNames(args.getList<wordRe>("patches"));
if (patchNames.size() == 1 && !patchNames.first().isPattern())
if (patchNames.size() == 1 && patchNames.first().isLiteral())
{
exposedPatchIDs.first() =
getExposedPatchId(mesh, patchNames.first());

View File

@ -58,7 +58,7 @@ bool Foam::functionEntries::removeEntry::execute
for (const keyType& key : patterns)
{
if (key.find('/') != string::npos || !key.isPattern())
if (key.isLiteral() && key.find('/') != string::npos)
{
// Remove scoped keyword, or keyword in the local scope
dictionary::searcher finder =

View File

@ -53,7 +53,7 @@ readField
// patch name since is key of dictionary.
forAllConstIter(dictionary, dict, iter)
{
if (iter().isDict() && !iter().keyword().isPattern())
if (iter().isDict() && iter().keyword().isLiteral())
{
const label patchi = bmesh_.findPatchID(iter().keyword());
@ -96,7 +96,7 @@ readField
{
const entry& e = iter();
if (e.isDict() && !e.keyword().isPattern())
if (e.isDict() && e.keyword().isLiteral())
{
const labelList patchIds =
bmesh_.indices(e.keyword(), true); // use patchGroups

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
\\/ M anipulation | Copyright (C) 2017-2018 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -29,8 +29,7 @@ Description
A keyType is the keyword of a dictionary.
It differs from word in that it also accepts patterns (regular expressions).
It is very similar to wordRe, but doesn't store the regular expression
separately.
It is very similar to wordRe, but doesn't store a regular expression.
SourceFiles
keyType.C
@ -47,12 +46,10 @@ SourceFiles
namespace Foam
{
// Forward declaration of classes
// Forward declarations
class keyType;
class Istream;
class Ostream;
// Forward declaration of friend functions and operators
class keyType;
Istream& operator>>(Istream& is, keyType& kw);
Ostream& operator<<(Ostream& os, const keyType& kw);
@ -70,6 +67,7 @@ class keyType
//- Is the keyType a pattern (regular expression)
bool isPattern_;
// Private Member Functions
//- No assignment where we cannot determine string/word type
@ -121,14 +119,17 @@ public:
keyType(Istream& is);
// Member functions
// Member Functions
//- Is this character valid for a keyType?
// This is largely identical with what word accepts, but also
// permit brace-brackets, which are valid for some regexs.
inline static bool valid(char c);
//- Treat as a pattern rather than a literal string?
//- The keyType is treated as literal, not as pattern.
inline bool isLiteral() const;
//- The keyType is treated as a pattern, not as literal string.
inline bool isPattern() const;
//- Swap contents
@ -139,7 +140,7 @@ public:
bool match(const std::string& text, bool literal = false) const;
// Member operators
// Member Operators
//- Perform smart match on text, as per match()
// Allows use as a predicate.
@ -162,7 +163,7 @@ public:
inline void operator=(const char* s);
// IOstream operators
// IOstream Operators
friend Istream& operator>>(Istream& is, keyType& kw);
friend Ostream& operator<<(Ostream& os, const keyType& kw);

View File

@ -84,7 +84,6 @@ inline Foam::keyType::keyType(const std::string& s, const bool isPattern)
{}
inline Foam::keyType::keyType(keyType&& s)
:
word(std::move(static_cast<word&>(s)), false),
@ -117,6 +116,12 @@ inline Foam::keyType::keyType(std::string&& s, const bool isPattern)
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
inline bool Foam::keyType::isLiteral() const
{
return !isPattern_;
}
inline bool Foam::keyType::isPattern() const
{
return isPattern_;

View File

@ -59,7 +59,7 @@ SourceFiles
namespace Foam
{
// Forward declaration of friend functions and operators
// Forward declarations
class wordRe;
class Istream;
class Ostream;
@ -81,6 +81,7 @@ class wordRe
//- The regular expression
mutable regExp re_;
public:
// Static data members
@ -97,6 +98,7 @@ public:
{
LITERAL = 0, //!< Treat as a string literal
DETECT = 1, //!< Detect if the string contains meta-characters
UNKNOWN = 1, //!< Unknown content.
REGEX = 2, //!< Treat as regular expression
ICASE = 4, //!< Ignore case in regular expression
NOCASE = 4, //!< \deprecated Alias for ICASE (deprecated APR-2018)
@ -163,11 +165,14 @@ public:
wordRe(Istream& is);
// Member functions
// Member Functions
// Access
//- Treat as a pattern rather than a literal string?
//- The wordRe is treated as literal, not as pattern.
inline bool isLiteral() const;
//- The wordRe is treated as a pattern, not as literal string.
inline bool isPattern() const;
@ -248,7 +253,7 @@ public:
inline void operator=(wordRe&& str);
// IOstream operators
// IOstream Operators
friend Istream& operator>>(Istream& is, wordRe& w);
friend Ostream& operator<<(Ostream& os, const wordRe& w);

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
\\/ M anipulation | Copyright (C) 2017-2018 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -157,6 +157,12 @@ inline Foam::wordRe::wordRe(const word& str, const compOption opt)
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
inline bool Foam::wordRe::isLiteral() const
{
return !re_.exists();
}
inline bool Foam::wordRe::isPattern() const
{
return re_.exists();

View File

@ -174,9 +174,9 @@ bool Foam::functionObjects::ddt2::execute()
// Check exact matches first
for (const wordRe& select : selectFields_)
{
if (!select.isPattern())
if (select.isLiteral())
{
const word& fieldName = static_cast<const word&>(select);
const word& fieldName = select;
if (!candidates.erase(fieldName))
{

View File

@ -133,9 +133,9 @@ bool Foam::functionObjects::zeroGradient::execute()
// Check exact matches first
for (const wordRe& select : selectFields_)
{
if (!select.isPattern())
if (select.isLiteral())
{
const word& fieldName = static_cast<const word&>(select);
const word& fieldName = select;
if (!candidates.erase(fieldName))
{

View File

@ -284,7 +284,7 @@ bool Foam::functionObjects::ensightWrite::write()
// Check exact matches first
for (const wordRe& select : selectFields_)
{
if (!select.isPattern())
if (select.isLiteral())
{
const word& fieldName = select;