Report patch name instead of index in debug
[foam-extend-3.2.git] / src / foam / db / IOstreams / token / tokenIO.C
blob41667b7f5a679e499cca1d9d2353995b48e5126d
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Description
25     Stream operators for token
27 \*---------------------------------------------------------------------------*/
29 #include "error.H"
30 #include "token.H"
32 #include "IOstreams.H"
33 #include "scalar.H"
35 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
37 Foam::token::token(Istream& is)
39     type_(UNDEFINED)
41     is.read(*this);
45 // * * * * * * * * * * * * IOstream operators  * * * * * * * * * * * * * * * //
47 Foam::Istream& Foam::operator>>(Istream& is, token& t)
49     t.clear();
50     return is.read(t);
54 Foam::Ostream& Foam::operator<<(Ostream& os, const token& t)
56     switch (t.type_)
57     {
58         case token::UNDEFINED:
59             os << "UNDEFINED";
60             WarningIn("Ostream& operator<<(Ostream&, const token&)")
61                 << "Undefined token" << endl;
62         break;
64         case token::PUNCTUATION:
65             os << t.punctuationToken_;
66         break;
68         case token::WORD:
69             os << *t.wordTokenPtr_;
70         break;
72         case token::STRING:
73             os << *t.stringTokenPtr_;
74         break;
76         case token::LABEL:
77             os << t.labelToken_;
78         break;
80         case token::FLOAT_SCALAR:
81             os << t.floatScalarToken_;
82         break;
84         case token::DOUBLE_SCALAR:
85             os << t.doubleScalarToken_;
86         break;
88         case token::LONG_DOUBLE_SCALAR:
89             os << t.longDoubleScalarToken_;
90         break;
92         case token::COMPOUND:
93             os << *t.compoundTokenPtr_;
94         break;
96         case token::FATALERROR:
97             os << "FATALERROR";
98             WarningIn("Ostream& operator<<(Ostream&, const token&)")
99                 << "Error token" << endl;
100         break;
102         default:
103             os << "UNKNOWN";
104             SeriousErrorIn("Ostream& operator<<(Ostream&, const token&)")
105                 << "Unknown token"
106                 << endl;
107     }
109     // Check state of stream
110     os.check("Ostream& operator<<(Ostream&, const token&)");
112     return os;
116 ostream& Foam::operator<<(ostream& os, const token::punctuationToken& pt)
118     return os << char(pt);
122 Foam::Ostream& Foam::operator<<(Ostream& os, const token::punctuationToken& pt)
124     return os << char(pt);
128 Foam::Ostream& Foam::operator<<(Ostream& os, const token::compound& ct)
130     os << ct.type() << token::SPACE;
131     ct.write(os);
133     return os;
137 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
139 ostream& Foam::operator<<(ostream& os, const InfoProxy<token>& ip)
141     const token& t = ip.t_;
143     os  << "on line " << t.lineNumber();
145     switch (t.type())
146     {
147         case token::UNDEFINED:
148             os  << " an undefined token";
149         break;
151         case token::PUNCTUATION:
152             os  << " the punctuation token " << '\'' << t.pToken() << '\'';
153         break;
155         case token::WORD:
156             os  << " the word " << '\'' << t.wordToken() << '\'';
157         break;
159         case token::STRING:
160             os  << " the string " << t.stringToken();
161         break;
163         case token::LABEL:
164             os  << " the label " << t.labelToken();
165         break;
167         case token::FLOAT_SCALAR:
168             os  << " the floatScalar " << t.floatScalarToken();
169         break;
171         case token::DOUBLE_SCALAR:
172             os  << " the doubleScalar " << t.doubleScalarToken();
173         break;
175         case token::LONG_DOUBLE_SCALAR:
176             os  << " the longDoubleScalar " << t.doubleScalarToken();
177         break;
179         case token::COMPOUND:
180         {
181             if (t.compoundToken().empty())
182             {
183                 os  << " the empty compound of type "
184                     << t.compoundToken().type();
185             }
186             else
187             {
188                 os  << " the compound of type "
189                     << t.compoundToken().type();
190             }
191         }
192         break;
194         case token::FATALERROR:
195             os  << " an error";
196         break;
198         default:
199             os  << " an unknown token type " << '\'' << int(t.type()) << '\'';
200     }
202     return os;
206 // template specialization
207 namespace Foam
210 #if defined (__GNUC__)
211 template<>
212 #endif
213 Ostream& operator<<(Ostream& os, const InfoProxy<token>& ip)
215     const token& t = ip.t_;
217     os  << "on line " << t.lineNumber();
219     switch (t.type())
220     {
221         case token::UNDEFINED:
222             os  << " an undefined token";
223         break;
225         case token::PUNCTUATION:
226             os  << " the punctuation token " << '\'' << t.pToken() << '\'';
227         break;
229         case token::WORD:
230             os  << " the word " << '\'' << t.wordToken() << '\'';
231         break;
233         case token::STRING:
234             os  << " the string " << t.stringToken();
235         break;
237         case token::LABEL:
238             os  << " the label " << t.labelToken();
239         break;
241         case token::FLOAT_SCALAR:
242             os  << " the floatScalar " << t.floatScalarToken();
243         break;
245         case token::DOUBLE_SCALAR:
246             os  << " the doubleScalar " << t.doubleScalarToken();
247         break;
249         case token::LONG_DOUBLE_SCALAR:
250             os  << " the longDoubleScalar " << t.longDoubleScalarToken();
251         break;
253         case token::COMPOUND:
254         {
255             if (t.compoundToken().empty())
256             {
257                 os  << " the empty compound of type "
258                     << t.compoundToken().type();
259             }
260             else
261             {
262                 os  << " the compound of type "
263                     << t.compoundToken().type();
264             }
265         }
266         break;
268         case token::FATALERROR:
269             os  << " an error";
270         break;
272         default:
273             os  << " an unknown token type "  << '\'' << int(t.type()) << '\'';
274     }
276     return os;
280 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
282 } // End namespace Foam
284 // ************************************************************************* //