summaryrefslogtreecommitdiff
path: root/inc/Standard_ErrorHandler.hxx
blob: af3b9b3b14fd3acfe051eb099a314ff8b0b0c670 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to 
// this header file considered to be the "object code" form of the original source.

#ifndef _Standard_ErrorHandler_HeaderFile
#define _Standard_ErrorHandler_HeaderFile

#ifndef _Standard_HeaderFile
#include <Standard.hxx>
#endif
#ifndef _Standard_Macro_HeaderFile
#include <Standard_Macro.hxx>
#endif

#ifndef _Standard_PErrorHandler_HeaderFile
#include <Standard_PErrorHandler.hxx>
#endif
#ifndef _Handle_Standard_Failure_HeaderFile
#include <Handle_Standard_Failure.hxx>
#endif
#ifndef _Standard_JmpBuf_HeaderFile
#include <Standard_JmpBuf.hxx>
#endif
#ifndef _Standard_HandlerStatus_HeaderFile
#include <Standard_HandlerStatus.hxx>
#endif
#ifndef _Standard_ThreadId_HeaderFile
#include <Standard_ThreadId.hxx>
#endif
#ifndef _Standard_Address_HeaderFile
#include <Standard_Address.hxx>
#endif
#ifndef _Standard_Boolean_HeaderFile
#include <Standard_Boolean.hxx>
#endif
#ifndef _Handle_Standard_Type_HeaderFile
#include <Handle_Standard_Type.hxx>
#endif
class Standard_Failure;
class Standard_ErrorHandlerCallback;
class Standard_Type;



class Standard_ErrorHandler  {
public:

  void* operator new(size_t,void* anAddress) 
  {
    return anAddress;
  }
  void* operator new(size_t size) 
  {
    return Standard::Allocate(size); 
  }
  void  operator delete(void *anAddress) 
  {
    if (anAddress) Standard::Free((Standard_Address&)anAddress); 
  }

  //! Create a ErrorHandler (to be used with try{}catch(){}). <br>
//!           It uses the "setjmp" and "longjmp" routines. <br>
  Standard_EXPORT   Standard_ErrorHandler();
  //! Unlinks and checks if there is a raised exception. <br>
  Standard_EXPORT     void Destroy() ;
~Standard_ErrorHandler()
{
  Destroy();
}
  //! Removes handler from the handlers list <br>
  Standard_EXPORT     void Unlink() ;
  //! Returns "True" if the caught exception has the same type <br>
//!          or inherits from "aType" <br>
  Standard_EXPORT     Standard_Boolean Catches(const Handle(Standard_Type)& aType) ;
  //! Returns label for jump <br>
        Standard_JmpBuf& Label() ;
  //! Returns the current Error. <br>
  Standard_EXPORT     Handle_Standard_Failure Error() const;
  //! Returns the caught exception. <br>
//! <br>
  Standard_EXPORT   static  Handle_Standard_Failure LastCaughtError() ;
  //! Test if the code is currently running in a try block <br>
  Standard_EXPORT   static  Standard_Boolean IsInTryBlock() ;


friend class Standard_Failure;
friend class Standard_ErrorHandlerCallback;



protected:





private:

  //! A exception is raised but it is not yet caught. <br>
//!          So Abort the current function and transmit the exception <br>
//!          to "calling routines". <br>
//! Warning: If no catch is prepared for this exception, it displays the <br>
//!          exception name and calls "exit(1)". <br>
  Standard_EXPORT   static  void Abort() ;
  //! Set the Error which will be transmitted to "calling routines". <br>
  Standard_EXPORT   static  void Error(const Handle(Standard_Failure)& aError) ;
  //! Returns the current handler (Top in former implemntations) <br>
  Standard_EXPORT   static  Standard_PErrorHandler FindHandler(const Standard_HandlerStatus theStatus,const Standard_Boolean theUnlink) ;


Standard_PErrorHandler myPrevious;
Handle_Standard_Failure myCaughtError;
Standard_JmpBuf myLabel;
Standard_HandlerStatus myStatus;
Standard_ThreadId myThread;
Standard_Address myCallbackPtr;


};


#include <Standard_ErrorHandler.lxx>



// other Inline functions and methods (like "C++: function call" methods)


#endif