BUG: UListIO: byteSize overflowing on really big faceLists
[OpenFOAM-2.0.x.git] / src / OpenFOAM / db / error / errorManip.H
blob446ef7cc0ce5a64c6a5e372e46687a799d511c51
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::errorManip
27 Description
28     Error stream manipulators for exit and abort which may terminate the
29     program or throw an exception depending if the exception
30     handling has been switched on (off by default).
32 Usage
33     \code
34         error << "message1" << "message2" << FoamDataType << exit(error, errNo);
35         error << "message1" << "message2" << FoamDataType << abort(error);
36     \endcode
38 \*---------------------------------------------------------------------------*/
40 #ifndef errorManip_H
41 #define errorManip_H
43 #include "error.H"
45 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 namespace Foam
50 // Forward declaration of friend functions and operators
51 template<class Err> class errorManip;
52 template<class Err> Ostream& operator<<(Ostream&, errorManip<Err>);
54 template<class Err, class T> class errorManipArg;
55 template<class Err, class T>
56 Ostream& operator<<(Ostream&, errorManipArg<Err, T>);
59 /*---------------------------------------------------------------------------*\
60                          Class errorManip Declaration
61 \*---------------------------------------------------------------------------*/
63 template<class Err>
64 class errorManip
66     void (Err::*fPtr_)();
67     Err& err_;
69 public:
71     errorManip(void (Err::*fPtr)(), Err& t)
72     :
73         fPtr_(fPtr),
74         err_(t)
75     {}
77     friend Ostream& operator<< <Err>(Ostream& os, errorManip<Err> m);
81 template<class Err>
82 inline Ostream& operator<<(Ostream& os, errorManip<Err> m)
84     (m.err_.*m.fPtr_)();
85     return os;
89 /*---------------------------------------------------------------------------*\
90                         Class errorManipArg Declaration
91 \*---------------------------------------------------------------------------*/
93 //- errorManipArg
94 template<class Err, class T>
95 class errorManipArg
97     void (Err::*fPtr_)(const T);
98     Err& err_;
99     T arg_;
101 public:
103     errorManipArg(void (Err::*fPtr)(const T), Err& t, const T i)
104     :
105         fPtr_(fPtr),
106         err_(t),
107         arg_(i)
108     {}
110     friend Ostream& operator<< <Err, T>(Ostream& os, errorManipArg<Err, T> m);
114 template<class Err, class T>
115 inline Ostream& operator<<(Ostream& os, errorManipArg<Err, T> m)
117     (m.err_.*m.fPtr_)(m.arg_);
118     return os;
122 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
124 inline errorManipArg<error, int>
125 exit(error& err, const int errNo = 1)
127     return errorManipArg<error, int>(&error::exit, err, errNo);
131 inline errorManip<error>
132 abort(error& err)
134     return errorManip<error>(&error::abort, err);
138 inline errorManipArg<IOerror, int>
139 exit(IOerror& err, const int errNo = 1)
141     return errorManipArg<IOerror, int>(&IOerror::exit, err, errNo);
145 inline errorManip<IOerror>
146 abort(IOerror& err)
148     return errorManip<IOerror>(&IOerror::abort, err);
152 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
154 } // End namespace Foam
156 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
158 #endif
160 // ************************************************************************* //