Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / foam / db / error / messageStream.C
blobe6af182c4952f6d984d6749b6e46c665ab4099c8
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 \*---------------------------------------------------------------------------*/
26 #include "error.H"
27 #include "dictionary.H"
28 #include "Pstream.H"
30 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
32 Foam::debug::debugSwitch
33 Foam::messageStream::level
35     "level",
36     2
40 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
42 Foam::messageStream::messageStream
44     const string& title,
45     errorSeverity sev,
46     const int maxErrors
49     title_(title),
50     severity_(sev),
51     maxErrors_(maxErrors),
52     errorCount_(0)
56 Foam::messageStream::messageStream(const dictionary& dict)
58     title_(dict.lookup("title")),
59     severity_(FATAL),
60     maxErrors_(0),
61     errorCount_(0)
65 Foam::OSstream& Foam::messageStream::operator()
67     const char* functionName,
68     const char* sourceFileName,
69     const int sourceFileLineNumber
72     OSstream& os = operator OSstream&();
74     os  << endl
75         << "    From function " << functionName << endl
76         << "    in file " << sourceFileName
77         << " at line " << sourceFileLineNumber << endl
78         << "    ";
80     return os;
84 Foam::OSstream& Foam::messageStream::operator()
86     const string& functionName,
87     const char* sourceFileName,
88     const int sourceFileLineNumber
91     return operator()
92     (
93         functionName.c_str(),
94         sourceFileName,
95         sourceFileLineNumber
96     );
100 Foam::OSstream& Foam::messageStream::operator()
102     const char* functionName,
103     const char* sourceFileName,
104     const int sourceFileLineNumber,
105     const string& ioFileName,
106     const label ioStartLineNumber,
107     const label ioEndLineNumber
110     OSstream& os = operator OSstream&();
112     os  << endl
113         << "    From function " << functionName << endl
114         << "    in file " << sourceFileName
115         << " at line " << sourceFileLineNumber << endl
116         << "    Reading " << ioFileName;
118     if (ioStartLineNumber >= 0 && ioEndLineNumber >= 0)
119     {
120         os  << " from line " << ioStartLineNumber
121             << " to line " << ioEndLineNumber;
122     }
123     else if (ioStartLineNumber >= 0)
124     {
125         os  << " at line " << ioStartLineNumber;
126     }
128     os << endl  << "    ";
130     return os;
134 Foam::OSstream& Foam::messageStream::operator()
136     const char* functionName,
137     const char* sourceFileName,
138     const int sourceFileLineNumber,
139     const IOstream& ioStream
142     return operator()
143     (
144         functionName,
145         sourceFileName,
146         sourceFileLineNumber,
147         ioStream.name(),
148         ioStream.lineNumber(),
149         -1
150     );
154 Foam::OSstream& Foam::messageStream::operator()
156     const char* functionName,
157     const char* sourceFileName,
158     const int sourceFileLineNumber,
159     const dictionary& dict
162     return operator()
163     (
164         functionName,
165         sourceFileName,
166         sourceFileLineNumber,
167         dict.name(),
168         dict.startLineNumber(),
169         dict.endLineNumber()
170     );
174 Foam::messageStream::operator Foam::OSstream&()
176     if (level)
177     {
178         bool collect = (severity_ == INFO || severity_ == WARNING);
180         // Report the error
181         if (!Pstream::master() && collect)
182         {
183             return Snull;
184         }
185         else
186         {
187             if (title().size())
188             {
189                 if (Pstream::parRun() && !collect)
190                 {
191                     Pout<< title().c_str();
192                 }
193                 else
194                 {
195                     Sout<< title().c_str();
196                 }
197             }
199             if (maxErrors_)
200             {
201                 errorCount_++;
203                 if (errorCount_ >= maxErrors_)
204                 {
205                     FatalErrorIn("messageStream::operator OSstream&()")
206                         << "Too many errors"
207                         << abort(FatalError);
208                 }
209             }
211             if (Pstream::parRun() && !collect)
212             {
213                 return Pout;
214             }
215             else
216             {
217                 return Sout;
218             }
219         }
220     }
222     return Snull;
226 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
227 // Global messageStream definitions
229 Foam::messageStream Foam::SeriousError
231     "--> FOAM Serious Error : ",
232     messageStream::SERIOUS,
233     100
236 Foam::messageStream Foam::Warning
238     "--> FOAM Warning : ",
239     messageStream::WARNING
242 Foam::messageStream Foam::Info("", messageStream::INFO);
245 // ************************************************************************* //