SALOME - SMESH
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
SMESH_ExceptHandlers.hxx
Go to the documentation of this file.
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 : SMESH_ExceptHandlers.hxx
24 // Author : Oksana Tchebanova
25 // Module : KERNEL
26 // $Header:
27 
28 
29 #ifndef SMESH_ExceptHandlers_HeaderFile
30 #define SMESH_ExceptHandlers_HeaderFile
31 
32 #include <stdexcept>
33 
34 #if defined SMESH_EXPORTS
35 #if defined WIN32
36 #define SMESH_EXPORT __declspec( dllexport )
37 #else
38 #define SMESH_EXPORT
39 #endif
40 #else
41 #if defined WNT
42 #define SMESH_EXPORT __declspec( dllimport )
43 #else
44 #define SMESH_EXPORT
45 #endif
46 #endif
47 
48 typedef void (*PVF)();
49 
50 class SMESH_EXPORT Unexpect { //save / retrieve unexpected exceptions treatment
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 = std::set_unexpected(f); }
60  ~Unexpect() { std::set_unexpected(old); }
61 #endif
62 };
63 
64 class SMESH_EXPORT Terminate {//save / retrieve terminate function
65 
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 = std::set_terminate(f); }
75  ~Terminate() { std::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 (SMESH_DataTypeCatalog::NotFound());
87 // }
88 // or the same :
89 //
90 // UNEXPECT_CATCH( DTC_NotFound , SMESH_DataTypeCatalog::NotFound)
91 // in the function body :
92 // ....
93 // Unexpect aCatch(DTC_NotFound) // redefinition of the unexpect exceptions handler
94 // ....
95 
96 
97 //Definitions :
99 #endif
void SmeshException()
void(* PVF)()
#define SMESH_EXPORT