Leak memory in elementary_functions tests
[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(L"", 0, Location());
41     }
42
43     ScilabException(std::wstring _wstErrorMesssage)
44     {
45         setLastError(999, _wstErrorMesssage.c_str(), 0, NULL);
46         createScilabException(_wstErrorMesssage, 0, Location());
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, 0, Location());
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, int _iErrorNumber, const Location& _ErrorLocation)
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, 0, Location());
136     }
137
138     ScilabMessage(std::string _stErrorMesssage)
139     {
140
141         wchar_t* pwst = to_wide_string(_stErrorMesssage.c_str());
142         createScilabException(pwst, 0, Location());
143         FREE(pwst);
144     }
145
146     ScilabMessage(const Location& _ErrorLocation) : ScilabException(_ErrorLocation) {}
147     ScilabMessage(std::wstring _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation)
148     {
149         createScilabException(_wstErrorMesssage, _iErrorNumber, _ErrorLocation);
150     }
151 };
152 }
153 #endif // !AST_SCILABEXCEPTION_HXX