kernel modules Wiedervereinigung
[scilab.git] / scilab / modules / ast / includes / ast / scilabexception.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2010 - DIGITEO - Antoine ELIAS
4  *
5  *  This file must be used under the terms of the CeCILL.
6  *  This source file is licensed as described in the file COPYING, which
7  *  you should have received as part of this distribution.  The terms
8  *  are also available at
9  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 #ifndef AST_SCILABEXCEPTION_HXX
14 #define AST_SCILABEXCEPTION_HXX
15
16 #include <string>
17 #include <stdexcept>
18 #include "location.hxx"
19 #include "localization.hxx"
20
21 extern "C"
22 {
23 #include "lasterror.h"
24 #include "sci_malloc.h"
25 #include "localization.h"
26 }
27
28 //disable warnings about exports STL items
29 #ifdef _MSC_VER
30 #pragma warning (disable : 4251)
31 #endif
32
33 namespace ast
34 {
35 class ScilabException : public std::exception
36 {
37 public :
38     ScilabException()
39     {
40         createScilabException();
41     }
42
43     ScilabException(std::wstring _wstErrorMesssage)
44     {
45         setLastError(999, _wstErrorMesssage.c_str(), 0, NULL);
46         createScilabException(_wstErrorMesssage);
47     }
48
49     ScilabException(std::string _stErrorMesssage)
50     {
51         wchar_t* pwst = to_wide_string(_stErrorMesssage.c_str());
52         setLastError(999, pwst, 0, NULL);
53         createScilabException(pwst);
54         FREE(pwst);
55     }
56     ScilabException(const Location& _ErrorLocation)
57     {
58         createScilabException(L"", 0, _ErrorLocation);
59     }
60
61     ScilabException(std::wstring _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation)
62     {
63         setLastError(_iErrorNumber, _wstErrorMesssage.c_str(), _ErrorLocation.first_line, NULL);
64         createScilabException(_wstErrorMesssage, _iErrorNumber, _ErrorLocation);
65     }
66
67     virtual ~ScilabException() throw() {};
68
69     void SetErrorMessage(std::wstring _wstErrorMesssage)
70     {
71         m_wstErrorMessage = _wstErrorMesssage;
72     }
73
74     std::wstring GetErrorMessage(void) const
75     {
76         return m_wstErrorMessage;
77     }
78
79     void SetErrorNumber(int _iErrorNumber)
80     {
81         m_iErrorNumber = _iErrorNumber;
82     }
83
84     int GetErrorNumber(void) const
85     {
86         return m_iErrorNumber;
87     }
88
89     void SetErrorLocation(const Location& _ErrorLocation)
90     {
91         m_ErrorLocation = _ErrorLocation;
92     }
93
94     const Location& GetErrorLocation(void) const
95     {
96         return m_ErrorLocation;
97     }
98 protected :
99     std::wstring m_wstErrorMessage;
100
101     int m_iErrorNumber;
102     Location m_ErrorLocation;
103
104 protected :
105     void createScilabException(std::wstring _wstErrorMessage = L"", int _iErrorNumber = 0, const Location& _ErrorLocation = *new Location())
106     {
107         m_wstErrorMessage = _wstErrorMessage;
108         m_iErrorNumber = _iErrorNumber;
109         m_ErrorLocation = _ErrorLocation;
110     }
111 };
112
113 class ScilabError : public ScilabException
114 {
115 public :
116     ScilabError() : ScilabException() {}
117     ScilabError(std::wstring _wstErrorMesssage) : ScilabException(_wstErrorMesssage) {}
118     ScilabError(std::string _stErrorMesssage) : ScilabException(_stErrorMesssage) {}
119     ScilabError(const Location& _ErrorLocation) : ScilabException(_ErrorLocation) {}
120     ScilabError(std::wstring _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation) : ScilabException(_wstErrorMesssage, _iErrorNumber, _ErrorLocation) {}
121 };
122
123 class InternalAbort : public ScilabException
124 {
125 public :
126     InternalAbort() {}
127 };
128
129 class ScilabMessage : public ScilabException
130 {
131 public :
132     ScilabMessage() : ScilabException() {}
133     ScilabMessage(std::wstring _wstErrorMesssage)
134     {
135         createScilabException(_wstErrorMesssage);
136     }
137
138     ScilabMessage(std::string _stErrorMesssage)
139     {
140
141         wchar_t* pwst = to_wide_string(_stErrorMesssage.c_str());
142         //setLastError(999, pwst, 0, NULL);
143         createScilabException(pwst);
144         FREE(pwst);
145     }
146
147     ScilabMessage(const Location& _ErrorLocation) : ScilabException(_ErrorLocation) {}
148     ScilabMessage(std::wstring _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation)
149     {
150         //setLastError(_iErrorNumber, _wstErrorMesssage.c_str(), 0, NULL);
151         createScilabException(_wstErrorMesssage, _iErrorNumber, _ErrorLocation);
152     }
153 };
154 }
155 #endif // !AST_SCILABEXCEPTION_HXX