mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
reworked stringListOps to improve the flexibility
- added subsetStrings and inplaceSubsetString - added class wordReListMatcher to wrap a match() for a UList<wordRe>
This commit is contained in:
@ -27,6 +27,7 @@ Description
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "stringListOps.H"
|
#include "stringListOps.H"
|
||||||
|
#include "IStringStream.H"
|
||||||
#include "IOstreams.H"
|
#include "IOstreams.H"
|
||||||
|
|
||||||
using namespace Foam;
|
using namespace Foam;
|
||||||
@ -36,21 +37,59 @@ using namespace Foam;
|
|||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
stringList sl(3);
|
stringList strLst
|
||||||
sl[0] = "hello";
|
(
|
||||||
sl[1] = "heello";
|
IStringStream
|
||||||
sl[2] = "heeello";
|
(
|
||||||
|
"("
|
||||||
|
"\"hello\""
|
||||||
|
"\"heello\""
|
||||||
|
"\"heeello\""
|
||||||
|
"\"bye\""
|
||||||
|
"\"bbye\""
|
||||||
|
"\"bbbye\""
|
||||||
|
"\"okey\""
|
||||||
|
"\"okkey\""
|
||||||
|
"\"okkkey\""
|
||||||
|
")"
|
||||||
|
)()
|
||||||
|
);
|
||||||
|
|
||||||
labelList matches = findStrings(".*ee.*", sl);
|
wordReList reLst(IStringStream("( okey \"[hy]e+.*\" )")());
|
||||||
|
|
||||||
Info<< "matches found for regexp .*ee.* : ";
|
Info<< "stringList " << strLst << nl;
|
||||||
|
|
||||||
|
labelList matches = findStrings(".*ee.*", strLst);
|
||||||
|
|
||||||
|
Info<< "matches found for regexp .*ee.* :" << nl << matches << nl;
|
||||||
forAll(matches, i)
|
forAll(matches, i)
|
||||||
{
|
{
|
||||||
Info<< " " << sl[matches[i]];
|
Info<< " -> " << strLst[matches[i]] << nl;
|
||||||
}
|
}
|
||||||
Info<< endl;
|
Info<< endl;
|
||||||
|
|
||||||
Info << "End\n" << endl;
|
matches = findStrings(reLst, strLst);
|
||||||
|
|
||||||
|
Info<< "matches found for " << reLst << nl << matches << nl;
|
||||||
|
forAll(matches, i)
|
||||||
|
{
|
||||||
|
Info<< " -> " << strLst[matches[i]] << nl;
|
||||||
|
}
|
||||||
|
Info<< endl;
|
||||||
|
|
||||||
|
stringList subLst = subsetStrings(".*ee.*", strLst);
|
||||||
|
Info<< "subset stringList: " << subLst << nl;
|
||||||
|
|
||||||
|
subLst = subsetStrings(reLst, strLst);
|
||||||
|
Info<< "subset stringList: " << subLst << nl;
|
||||||
|
|
||||||
|
inplaceSubsetStrings(reLst, strLst);
|
||||||
|
Info<< "subsetted stringList: " << strLst << nl;
|
||||||
|
|
||||||
|
inplaceSubsetStrings(".*l.*", strLst);
|
||||||
|
Info<< "subsetted stringList: " << strLst << nl;
|
||||||
|
|
||||||
|
Info<< "\nEnd\n" << endl;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,7 +66,9 @@ bool Foam::functionEntries::removeEntry::execute
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
wordList dictKeys = parentDict.toc();
|
wordList dictKeys = parentDict.toc();
|
||||||
labelList indices = findStrings<word>(readList<wordRe>(is), dictKeys);
|
wordReList patterns(is);
|
||||||
|
|
||||||
|
labelList indices = findStrings(patterns, dictKeys);
|
||||||
|
|
||||||
forAll(indices, indexI)
|
forAll(indices, indexI)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -36,54 +36,262 @@ SourceFiles
|
|||||||
#ifndef stringListOps_H
|
#ifndef stringListOps_H
|
||||||
#define stringListOps_H
|
#define stringListOps_H
|
||||||
|
|
||||||
|
#include "regExp.H"
|
||||||
#include "labelList.H"
|
#include "labelList.H"
|
||||||
#include "stringList.H"
|
#include "stringList.H"
|
||||||
#include "wordReList.H"
|
#include "wordReList.H"
|
||||||
|
#include "wordReListMatcher.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
//- Return list indices for strings matching the regular expression
|
// single-string matches:
|
||||||
template<class StringType>
|
|
||||||
labelList findStrings
|
|
||||||
(
|
|
||||||
const char* regexpPattern,
|
|
||||||
const UList<StringType>&
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Return list indices for strings matching the regular expression
|
|
||||||
template<class StringType>
|
|
||||||
labelList findStrings
|
|
||||||
(
|
|
||||||
const std::string& regexpPattern,
|
|
||||||
const UList<StringType>&
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Return list indices for strings matching the regular expression
|
|
||||||
template<class StringType>
|
|
||||||
labelList findStrings
|
|
||||||
(
|
|
||||||
const wordRe&,
|
|
||||||
const UList<StringType>&
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Return list indices for strings matching one of the regular expression
|
|
||||||
template<class StringType>
|
|
||||||
labelList findStrings
|
|
||||||
(
|
|
||||||
const UList<wordRe>&,
|
|
||||||
const UList<StringType>&
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Return true if string matches one of the regular expressions
|
//- Return true if string matches one of the regular expressions
|
||||||
template<class StringType>
|
inline bool findStrings
|
||||||
bool findStrings
|
|
||||||
(
|
(
|
||||||
const UList<wordRe>&,
|
const wordReListMatcher& matcher,
|
||||||
const StringType& str
|
const std::string& str
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return matcher.match(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
// multi-string matches:
|
||||||
|
|
||||||
|
//- Return list indices for matching strings
|
||||||
|
template<class Matcher, class StringType>
|
||||||
|
labelList findMatchingStrings
|
||||||
|
(
|
||||||
|
const Matcher&,
|
||||||
|
const UList<StringType>&,
|
||||||
|
const bool invert=false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return list indices for strings matching the regular expression
|
||||||
|
// Template partial specialization of findMatchingStrings
|
||||||
|
template<class StringType>
|
||||||
|
labelList findStrings
|
||||||
|
(
|
||||||
|
const regExp& re,
|
||||||
|
const UList<StringType>& lst,
|
||||||
|
const bool invert=false
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return findMatchingStrings(re, lst, invert);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return list indices for strings matching the regular expression
|
||||||
|
// Template partial specialization of findMatchingStrings
|
||||||
|
template<class StringType>
|
||||||
|
labelList findStrings
|
||||||
|
(
|
||||||
|
const char* rePattern,
|
||||||
|
const UList<StringType>& lst,
|
||||||
|
const bool invert=false
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return findStrings(regExp(rePattern), lst, invert);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return list indices for strings matching the regular expression
|
||||||
|
// Template partial specialization of findMatchingStrings
|
||||||
|
template<class StringType>
|
||||||
|
labelList findStrings
|
||||||
|
(
|
||||||
|
const std::string& rePattern,
|
||||||
|
const UList<StringType>& lst,
|
||||||
|
const bool invert=false
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return findMatchingStrings(regExp(rePattern), lst, invert);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return list indices for strings matching the regular expression
|
||||||
|
// Template partial specialization of findMatchingStrings
|
||||||
|
template<class StringType>
|
||||||
|
labelList findStrings
|
||||||
|
(
|
||||||
|
const wordRe& wre,
|
||||||
|
const UList<StringType>& lst,
|
||||||
|
const bool invert=false
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return findMatchingStrings(wre, lst, invert);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//- Return list indices for strings matching one of the regular expression
|
||||||
|
// Template partial specialization of findMatchingStrings
|
||||||
|
template<class StringType>
|
||||||
|
labelList findStrings
|
||||||
|
(
|
||||||
|
const wordReListMatcher& matcher,
|
||||||
|
const UList<StringType>& lst,
|
||||||
|
const bool invert=false
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return findMatchingStrings(matcher, lst, invert);
|
||||||
|
}
|
||||||
|
|
||||||
|
// subsetting multi-string matches (similar to ListOp):
|
||||||
|
|
||||||
|
//- Extract elements of StringList when regular expression matches
|
||||||
|
// optionally invert the match
|
||||||
|
// eg, to extract all selected elements:
|
||||||
|
// subsetMatchingStrings<regExp, stringList>(myRegExp, lst);
|
||||||
|
template<class Matcher, class StringListType>
|
||||||
|
StringListType subsetMatchingStrings
|
||||||
|
(
|
||||||
|
const Matcher&,
|
||||||
|
const StringListType&,
|
||||||
|
const bool invert=false
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Extract elements of StringList when regular expression matches
|
||||||
|
// Template partial specialization of subsetMatchingStrings
|
||||||
|
template<class StringListType>
|
||||||
|
StringListType subsetStrings
|
||||||
|
(
|
||||||
|
const regExp& re,
|
||||||
|
const StringListType& lst,
|
||||||
|
const bool invert=false
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return subsetMatchingStrings(re, lst, invert);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Extract elements of StringList when regular expression matches
|
||||||
|
// Template partial specialization of subsetMatchingStrings
|
||||||
|
template<class StringListType>
|
||||||
|
StringListType subsetStrings
|
||||||
|
(
|
||||||
|
const char* rePattern,
|
||||||
|
const StringListType& lst,
|
||||||
|
const bool invert=false
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return subsetMatchingStrings(regExp(rePattern), lst, invert);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Extract elements of StringList when regular expression matches
|
||||||
|
// Template partial specialization of subsetMatchingStrings
|
||||||
|
template<class StringListType>
|
||||||
|
StringListType subsetStrings
|
||||||
|
(
|
||||||
|
const std::string& rePattern,
|
||||||
|
const StringListType& lst,
|
||||||
|
const bool invert=false
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return subsetMatchingStrings(regExp(rePattern), lst, invert);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Extract elements of StringList when regular expression matches
|
||||||
|
// Template partial specialization of subsetMatchingStrings
|
||||||
|
template<class StringListType>
|
||||||
|
StringListType subsetStrings
|
||||||
|
(
|
||||||
|
const wordRe& wre,
|
||||||
|
const StringListType& lst,
|
||||||
|
const bool invert=false
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return subsetMatchingStrings(wre, lst, invert);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Extract elements of StringList when regular expression matches
|
||||||
|
// Template partial specialization of subsetMatchingStrings
|
||||||
|
template<class StringListType>
|
||||||
|
StringListType subsetStrings
|
||||||
|
(
|
||||||
|
const wordReListMatcher& matcher,
|
||||||
|
const StringListType& lst,
|
||||||
|
const bool invert=false
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return subsetMatchingStrings(matcher, lst, invert);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//- Inplace extract elements of StringList when regular expression matches
|
||||||
|
// optionally invert the match
|
||||||
|
// eg, to extract all selected elements:
|
||||||
|
// inplaceSubsetMatchingStrings<regExp, stringList>(myRegExp, lst);
|
||||||
|
template<class Matcher, class StringListType>
|
||||||
|
void inplaceSubsetMatchingStrings
|
||||||
|
(
|
||||||
|
const Matcher&,
|
||||||
|
StringListType&,
|
||||||
|
const bool invert=false
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Inplace extract elements of StringList when regular expression matches
|
||||||
|
// Template partial specialization of inplaceSubsetMatchingStrings
|
||||||
|
template<class StringListType>
|
||||||
|
void inplaceSubsetStrings
|
||||||
|
(
|
||||||
|
const regExp& re,
|
||||||
|
StringListType& lst,
|
||||||
|
const bool invert=false
|
||||||
|
)
|
||||||
|
{
|
||||||
|
inplaceSubsetMatchingStrings(re, lst, invert);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Inplace extract elements of StringList when regular expression matches
|
||||||
|
// Template partial specialization of inplaceSubsetMatchingStrings
|
||||||
|
template<class StringListType>
|
||||||
|
void inplaceSubsetStrings
|
||||||
|
(
|
||||||
|
const char* rePattern,
|
||||||
|
StringListType& lst,
|
||||||
|
const bool invert=false
|
||||||
|
)
|
||||||
|
{
|
||||||
|
inplaceSubsetMatchingStrings(regExp(rePattern), lst, invert);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Inplace extract elements of StringList when regular expression matches
|
||||||
|
// Template partial specialization of inplaceSubsetMatchingStrings
|
||||||
|
template<class StringListType>
|
||||||
|
void inplaceSubsetStrings
|
||||||
|
(
|
||||||
|
const std::string& rePattern,
|
||||||
|
StringListType& lst,
|
||||||
|
const bool invert=false
|
||||||
|
)
|
||||||
|
{
|
||||||
|
inplaceSubsetMatchingStrings(regExp(rePattern), lst, invert);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Inplace extract elements of StringList when regular expression matches
|
||||||
|
// Template partial specialization of inplaceSubsetMatchingStrings
|
||||||
|
template<class StringListType>
|
||||||
|
void inplaceSubsetStrings
|
||||||
|
(
|
||||||
|
const wordRe& wre,
|
||||||
|
StringListType& lst,
|
||||||
|
const bool invert=false
|
||||||
|
)
|
||||||
|
{
|
||||||
|
inplaceSubsetMatchingStrings(wre, lst, invert);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Inplace extract elements of StringList when regular expression matches
|
||||||
|
// Template partial specialization of inplaceSubsetMatchingStrings
|
||||||
|
template<class StringListType>
|
||||||
|
void inplaceSubsetStrings
|
||||||
|
(
|
||||||
|
const wordReListMatcher& matcher,
|
||||||
|
StringListType& lst,
|
||||||
|
const bool invert=false
|
||||||
|
)
|
||||||
|
{
|
||||||
|
inplaceSubsetMatchingStrings(matcher, lst, invert);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -24,126 +24,73 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "labelList.H"
|
|
||||||
#include "regExp.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Matcher, class StringType>
|
||||||
template<class StringType>
|
Foam::labelList Foam::findMatchingStrings
|
||||||
Foam::labelList Foam::findStrings
|
|
||||||
(
|
(
|
||||||
const char* pattern,
|
const Matcher& matcher,
|
||||||
const UList<StringType>& lst
|
const UList<StringType>& lst,
|
||||||
|
const bool invert
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
regExp re(pattern);
|
labelList indices(lst.size());
|
||||||
labelList matched(lst.size());
|
|
||||||
|
|
||||||
label matchI = 0;
|
label nElem = 0;
|
||||||
forAll(lst, elemI)
|
forAll(lst, elemI)
|
||||||
{
|
{
|
||||||
if (re.match(lst[elemI]))
|
if (matcher.match(lst[elemI]) ? !invert : invert)
|
||||||
{
|
{
|
||||||
matched[matchI++] = elemI;
|
indices[nElem++] = elemI;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
matched.setSize(matchI);
|
indices.setSize(nElem);
|
||||||
|
|
||||||
return matched;
|
return indices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class StringType>
|
template<class Matcher, class StringListType>
|
||||||
Foam::labelList Foam::findStrings
|
StringListType Foam::subsetMatchingStrings
|
||||||
(
|
(
|
||||||
const std::string& pattern,
|
const Matcher& matcher,
|
||||||
const UList<StringType>& lst
|
const StringListType& lst,
|
||||||
|
const bool invert
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
regExp re(pattern);
|
StringListType newLst(lst.size());
|
||||||
labelList matched(lst.size());
|
|
||||||
|
|
||||||
label matchI = 0;
|
label nElem = 0;
|
||||||
forAll(lst, elemI)
|
forAll(lst, elemI)
|
||||||
{
|
{
|
||||||
if (re.match(lst[elemI]))
|
if (matcher.match(lst[elemI]) ? !invert : invert)
|
||||||
{
|
{
|
||||||
matched[matchI++] = elemI;
|
newLst[nElem++] = lst[elemI];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
matched.setSize(matchI);
|
newLst.setSize(nElem);
|
||||||
|
|
||||||
return matched;
|
return newLst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class StringType>
|
template<class Matcher, class StringListType>
|
||||||
Foam::labelList Foam::findStrings
|
void Foam::inplaceSubsetMatchingStrings
|
||||||
(
|
(
|
||||||
const wordRe& wre,
|
const Matcher& matcher,
|
||||||
const UList<StringType>& lst
|
StringListType& lst,
|
||||||
|
const bool invert
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
labelList matched(lst.size());
|
label nElem = 0;
|
||||||
|
|
||||||
label matchI = 0;
|
|
||||||
forAll(lst, elemI)
|
forAll(lst, elemI)
|
||||||
{
|
{
|
||||||
if (wre.match(lst[elemI]))
|
if (matcher.match(lst[elemI]) ? !invert : invert)
|
||||||
{
|
{
|
||||||
matched[matchI++] = elemI;
|
lst[nElem++] = lst[elemI];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
matched.setSize(matchI);
|
lst.setSize(nElem);
|
||||||
|
|
||||||
return matched;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class StringType>
|
|
||||||
Foam::labelList Foam::findStrings
|
|
||||||
(
|
|
||||||
const UList<wordRe>& wreLst,
|
|
||||||
const UList<StringType>& lst
|
|
||||||
)
|
|
||||||
{
|
|
||||||
labelList matched(lst.size());
|
|
||||||
|
|
||||||
label matchI = 0;
|
|
||||||
forAll(lst, elemI)
|
|
||||||
{
|
|
||||||
forAll(wreLst, reI)
|
|
||||||
{
|
|
||||||
if (wreLst[reI].match(lst[elemI]))
|
|
||||||
{
|
|
||||||
matched[matchI++] = elemI;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
matched.setSize(matchI);
|
|
||||||
|
|
||||||
return matched;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class StringType>
|
|
||||||
bool Foam::findStrings
|
|
||||||
(
|
|
||||||
const UList<wordRe>& wreLst,
|
|
||||||
const StringType& str
|
|
||||||
)
|
|
||||||
{
|
|
||||||
forAll(wreLst, reI)
|
|
||||||
{
|
|
||||||
if (wreLst[reI].match(str))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
101
src/OpenFOAM/primitives/Lists/wordReListMatcher.H
Normal file
101
src/OpenFOAM/primitives/Lists/wordReListMatcher.H
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::wordReListMatcher
|
||||||
|
|
||||||
|
Description
|
||||||
|
A wrapper for matching a List of wordRe.
|
||||||
|
|
||||||
|
Note
|
||||||
|
The constructor should remain non-explicit. This allows automatic
|
||||||
|
conversion from UList\<wordRe\> to wordReListMatcher in search
|
||||||
|
functions.
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
wordReListMatcherI.H
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef wordReListMatcher_H
|
||||||
|
#define wordReListMatcher_H
|
||||||
|
|
||||||
|
#include "wordReList.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class wordReListMatcher Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class wordReListMatcher
|
||||||
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Reference to underlying list
|
||||||
|
const UList<wordRe>& reList_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from a List of wordRe
|
||||||
|
inline wordReListMatcher(const UList<wordRe>&);
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
// Access
|
||||||
|
|
||||||
|
inline label size() const;
|
||||||
|
inline bool empty() const;
|
||||||
|
|
||||||
|
//- Return underlying list of wordRe
|
||||||
|
inline const UList<wordRe>& operator()() const;
|
||||||
|
|
||||||
|
|
||||||
|
// Searching
|
||||||
|
|
||||||
|
//- Return true if string matches any of the regular expressions
|
||||||
|
// Smart match as regular expression or as a string.
|
||||||
|
// Optionally specify a literal match only.
|
||||||
|
inline bool match(const string&, bool literalMatch=false) const;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "wordReListMatcherI.H"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
79
src/OpenFOAM/primitives/Lists/wordReListMatcherI.H
Normal file
79
src/OpenFOAM/primitives/Lists/wordReListMatcherI.H
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
inline Foam::wordReListMatcher::wordReListMatcher
|
||||||
|
(
|
||||||
|
const UList<wordRe>& lst
|
||||||
|
)
|
||||||
|
:
|
||||||
|
reList_(lst)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
inline Foam::label Foam::wordReListMatcher::size() const
|
||||||
|
{
|
||||||
|
return reList_.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline bool Foam::wordReListMatcher::empty() const
|
||||||
|
{
|
||||||
|
return reList_.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline const Foam::UList<Foam::wordRe>&
|
||||||
|
Foam::wordReListMatcher::operator()() const
|
||||||
|
{
|
||||||
|
return reList_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline bool Foam::wordReListMatcher::match
|
||||||
|
(
|
||||||
|
const string& str,
|
||||||
|
bool literalMatch
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
const label nElem = reList_.size();
|
||||||
|
for (label elemI = 0; elemI < nElem; ++elemI)
|
||||||
|
{
|
||||||
|
if (reList_[elemI].match(str, literalMatch))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -170,7 +170,7 @@ public:
|
|||||||
|
|
||||||
//- Smart match as regular expression or as a string
|
//- Smart match as regular expression or as a string
|
||||||
// Optionally specify a literal match only
|
// Optionally specify a literal match only
|
||||||
inline bool match(const string&, bool literalMatch=false) const;
|
inline bool match(const std::string&, bool literalMatch=false) const;
|
||||||
|
|
||||||
//- Miscellaneous
|
//- Miscellaneous
|
||||||
|
|
||||||
|
|||||||
@ -176,12 +176,12 @@ inline void Foam::wordRe::clear()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline bool Foam::wordRe::match(const string& str, bool literalMatch) const
|
inline bool Foam::wordRe::match(const std::string& str, bool literalMatch) const
|
||||||
{
|
{
|
||||||
if (literalMatch || !re_.exists())
|
if (literalMatch || !re_.exists())
|
||||||
{
|
{
|
||||||
// check as string
|
// check as string
|
||||||
return (*this == str);
|
return (str == *this);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -97,7 +97,7 @@ Foam::Map<Foam::word> Foam::boundaryRegion::names() const
|
|||||||
|
|
||||||
Foam::Map<Foam::word> Foam::boundaryRegion::names
|
Foam::Map<Foam::word> Foam::boundaryRegion::names
|
||||||
(
|
(
|
||||||
const List<wordRe>& patterns
|
const UList<wordRe>& patterns
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
Map<word> lookup;
|
Map<word> lookup;
|
||||||
|
|||||||
@ -112,7 +112,7 @@ public:
|
|||||||
Map<word> names() const;
|
Map<word> names() const;
|
||||||
|
|
||||||
//- Return a Map of (id => names) selected by patterns
|
//- Return a Map of (id => names) selected by patterns
|
||||||
Map<word> names(const List<wordRe>& patterns) const;
|
Map<word> names(const UList<wordRe>& patterns) const;
|
||||||
|
|
||||||
//- Return a Map of (id => type)
|
//- Return a Map of (id => type)
|
||||||
Map<word> boundaryTypes() const;
|
Map<word> boundaryTypes() const;
|
||||||
|
|||||||
@ -169,7 +169,7 @@ Foam::Map<Foam::word> Foam::cellTable::names() const
|
|||||||
|
|
||||||
Foam::Map<Foam::word> Foam::cellTable::names
|
Foam::Map<Foam::word> Foam::cellTable::names
|
||||||
(
|
(
|
||||||
const List<wordRe>& patterns
|
const UList<wordRe>& patterns
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
Map<word> lookup;
|
Map<word> lookup;
|
||||||
|
|||||||
@ -139,7 +139,7 @@ public:
|
|||||||
Map<word> names() const;
|
Map<word> names() const;
|
||||||
|
|
||||||
//- Return a Map of (id => names) selected by patterns
|
//- Return a Map of (id => names) selected by patterns
|
||||||
Map<word> names(const List<wordRe>& patterns) const;
|
Map<word> names(const UList<wordRe>& patterns) const;
|
||||||
|
|
||||||
//- Return a Map of (id => name) for materialType (fluid | solid | shell)
|
//- Return a Map of (id => name) for materialType (fluid | solid | shell)
|
||||||
Map<word> selectType(const word& materialType) const;
|
Map<word> selectType(const word& materialType) const;
|
||||||
|
|||||||
Reference in New Issue
Block a user