OpenFOAM logo
The Open Source CFD Toolbox
  Source Guide OpenCFD Solutions Contact OpenFOAM

wordIO.C

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------------*\
00002   =========                 |
00003   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
00004    \\    /   O peration     |
00005     \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
00006      \\/     M anipulation  |
00007 -------------------------------------------------------------------------------
00008 License
00009     This file is part of OpenFOAM.
00010 
00011     OpenFOAM is free software; you can redistribute it and/or modify it
00012     under the terms of the GNU General Public License as published by the
00013     Free Software Foundation; either version 2 of the License, or (at your
00014     option) any later version.
00015 
00016     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
00017     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00018     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
00019     for more details.
00020 
00021     You should have received a copy of the GNU General Public License
00022     along with OpenFOAM; if not, write to the Free Software Foundation,
00023     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
00024 
00025 Description
00026     Istream constructor and IOstream operators for word.
00027 
00028 \*---------------------------------------------------------------------------*/
00029 
00030 #include "word.H"
00031 #include "IOstreams.H"
00032 
00033 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00034 
00035 Foam::word::word(Istream& is)
00036 :
00037     string()
00038 {
00039     is >> *this;
00040 }
00041 
00042 
00043 Foam::Istream& Foam::operator>>(Istream& is, word& w)
00044 {
00045     token t(is);
00046 
00047     if (!t.good())
00048     {
00049         is.setBad();
00050         return is;
00051     }
00052 
00053     if (t.isWord())
00054     {
00055         w = t.wordToken();
00056     }
00057     else if (t.isString())
00058     {
00059         // try a bit harder and convert string to word
00060         w = t.stringToken();
00061         string::stripInvalid<word>(w);
00062 
00063         // flag empty strings and bad chars as an error
00064         if (w.empty() || w.size() != t.stringToken().size())
00065         {
00066             is.setBad();
00067             FatalIOErrorIn("operator>>(Istream&, word&)", is)
00068                 << "wrong token type - expected word found non-word characters "
00069                 << t.info()
00070                 << exit(FatalIOError);
00071             return is;
00072         }
00073     }
00074     else
00075     {
00076         is.setBad();
00077         FatalIOErrorIn("operator>>(Istream&, word&)", is)
00078             << "wrong token type - expected word found "
00079             << t.info()
00080             << exit(FatalIOError);
00081 
00082         return is;
00083     }
00084 
00085     // Check state of IOstream
00086     is.check("Istream& operator>>(Istream&, word&)");
00087 
00088     return is;
00089 }
00090 
00091 
00092 Foam::Ostream& Foam::operator<<(Ostream& os, const word& w)
00093 {
00094     os.write(w);
00095     os.check("Ostream& operator<<(Ostream&, const word&)");
00096     return os;
00097 }
00098 
00099 
00100 // ************************************************************************* //
Copyright © 2000-2009 OpenCFD Ltd