Files
openfoam/src/OpenFOAM/primitives/strings/wordRe/wordReIO.C
Mark Olesen 2717aa5c7d new wordRe class - a word that holds a regExp
- a possible future replacement for keyType, but the immediate use is the
    wordReList for grepping through other lists.
  - note that the argList treatment of '(' ... ')' yields quoted strings,
    which we can use for building a wordReList

minor cleanup of regExp class

  - constructor from std::string, match std::string and
    operator=(std::string&)
    rely on automatic conversion to Foam::string
  - ditch partialMatch with sub-groups, it doesn't make much sense
2009-01-04 00:33:27 +01:00

114 lines
2.7 KiB
C

/*---------------------------------------------------------------------------*\
========= |
\\ / 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
\*---------------------------------------------------------------------------*/
#include "wordRe.H"
#include "IOstreams.H"
#include "InfoProxy.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Foam::wordRe::wordRe(Istream& is)
:
word(),
re_(NULL)
{
is >> *this;
}
Foam::Istream& Foam::operator>>(Istream& is, wordRe& w)
{
token t(is);
if (!t.good())
{
is.setBad();
return is;
}
if (t.isWord())
{
w = t.wordToken();
}
else if (t.isString())
{
// Auto-tests for regular expression
w = t.stringToken();
}
else
{
is.setBad();
FatalIOErrorIn("operator>>(Istream&, wordRe&)", is)
<< "wrong token type - expected word or string found "
<< t.info()
<< exit(FatalIOError);
return is;
}
// Check state of IOstream
is.check("Istream& operator>>(Istream&, wordRe&)");
return is;
}
Foam::Ostream& Foam::operator<<(Ostream& os, const wordRe& w)
{
if (w.isPattern())
{
os.write(static_cast<const string&>(w));
}
else
{
os.write(static_cast<const word&>(w));
}
os.check("Ostream& operator<<(Ostream&, const wordRe&)");
return os;
}
template<>
Foam::Ostream& Foam::operator<<(Ostream& os, const InfoProxy<wordRe>& ip)
{
const wordRe& wre = ip.t_;
if (wre.isPattern())
{
os << "wordRe(regex) " << wre;
}
else
{
os << "wordRe(plain) '" << wre << "'";
}
os.flush();
return os;
}
// ************************************************************************* //