Salome HOME
Join modifications from branch BR_DEBUG_3_2_0b1
[modules/kernel.git] / src / Utils / Utils_ExceptHandlers.hxx
1 //  KERNEL Utils : common utils for KERNEL
2 //  Copyright (C) 2003  CEA
3 //
4 //  This library is free software; you can redistribute it and/or
5 //  modify it under the terms of the GNU Lesser General Public
6 //  License as published by the Free Software Foundation; either
7 //  version 2.1 of the License.
8 //
9
10 //  This library is distributed in the hope that it will be useful,
11 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 //  Lesser General Public License for more details.
14 //
15 //  You should have received a copy of the GNU Lesser General Public
16 //  License along with this library; if not, write to the Free Software
17 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
18 //
19 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 //
21 //
22 //
23 //  File   : Utils_ExceptHandlers.hxx
24 //  Author : Oksana Tchebanova
25 //  Module : KERNEL
26 //  $Header:
27
28
29 #ifndef Utils_ExceptHandlers_HeaderFile
30 #define Utils_ExceptHandlers_HeaderFile
31
32 #include <stdexcept>
33
34 #if defined UTILS_EXPORTS
35 #if defined WIN32
36 #define UTILS_EXPORT __declspec( dllexport )
37 #else
38 #define UTILS_EXPORT
39 #endif
40 #else
41 #if defined WNT
42 #define UTILS_EXPORT __declspec( dllimport )
43 #else
44 #define UTILS_EXPORT
45 #endif
46 #endif
47
48 typedef void (*PVF)();
49
50 class UTILS_EXPORT Unexpect { //save / retrieve unexpected exceptions treatment
51   PVF old;
52   public :
53 #ifndef WNT
54     Unexpect( PVF f ) 
55       { old = std::set_unexpected(f); }
56   ~Unexpect() { std::set_unexpected(old); }
57 #else
58     Unexpect( PVF f ) 
59       { old = ::set_unexpected(f); }
60   ~Unexpect() { ::set_unexpected(old); }
61 #endif
62 };
63
64 class UTILS_EXPORT Terminate {//save / retrieve terminate function
65   
66   PVF old;
67   public :
68 #ifndef WNT
69     Terminate( PVF f ) 
70       { old = std::set_terminate(f); }
71   ~Terminate() { std::set_terminate(old); }
72 #else
73     Terminate( PVF f ) 
74       { old = ::set_terminate(f); }
75   ~Terminate() { ::set_terminate(old); }
76 #endif
77 };
78
79 #define UNEXPECT_CATCH(FuncName, ExceptionConstructor) \
80 inline void FuncName () {\
81    throw ExceptionConstructor (); \
82 }
83 //Example of the usage 
84
85 // void DTC_NotFound () {
86 //   throw (SALOME_DataTypeCatalog::NotFound());
87 // }
88 // or the same :
89 //
90 // UNEXPECT_CATCH( DTC_NotFound , SALOME_DataTypeCatalog::NotFound)
91 // in the function body :
92 // ....
93 // Unexpect aCatch(DTC_NotFound) // redefinition of the unexpect exceptions handler
94 // ....
95
96
97 //Definitions :
98 UTILS_EXPORT extern void SalomeException();
99 UTILS_EXPORT extern void SALOME_SalomeException();
100
101 #endif