diff options
Diffstat (limited to 'src/exceptionbase.cpp')
-rw-r--r-- | src/exceptionbase.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/exceptionbase.cpp b/src/exceptionbase.cpp new file mode 100644 index 0000000..3cde134 --- /dev/null +++ b/src/exceptionbase.cpp | |||
@@ -0,0 +1,60 @@ | |||
1 | #include "exception.h" | ||
2 | #include <stdarg.h> | ||
3 | |||
4 | Exception::Exception( const char *lpFormat, ... ) throw() : | ||
5 | nErrorCode( 0 ), | ||
6 | sWhat( NULL ) | ||
7 | { | ||
8 | va_list ap; | ||
9 | |||
10 | va_start(ap, lpFormat); | ||
11 | setWhat( lpFormat, ap ); | ||
12 | va_end(ap); | ||
13 | } | ||
14 | |||
15 | Exception::Exception( int nCode, const char *lpFormat, ... ) throw() : | ||
16 | nErrorCode( nCode ), | ||
17 | sWhat( NULL ) | ||
18 | { | ||
19 | va_list ap; | ||
20 | |||
21 | va_start(ap, lpFormat); | ||
22 | setWhat( lpFormat, ap ); | ||
23 | va_end(ap); | ||
24 | } | ||
25 | |||
26 | Exception::Exception( int nCode ) throw() : | ||
27 | nErrorCode( nCode ), | ||
28 | sWhat( NULL ) | ||
29 | { | ||
30 | } | ||
31 | |||
32 | Exception::~Exception() throw() | ||
33 | { | ||
34 | if( sWhat ) | ||
35 | { | ||
36 | delete[] sWhat; | ||
37 | sWhat = NULL; | ||
38 | } | ||
39 | } | ||
40 | |||
41 | void Exception::setWhat( const char *lpFormat, va_list &vargs ) | ||
42 | { | ||
43 | if( sWhat ) delete[] sWhat; | ||
44 | int nSize; | ||
45 | |||
46 | nSize = vsnprintf( NULL, 0, lpFormat, vargs ); | ||
47 | sWhat = new char[nSize+1]; | ||
48 | vsnprintf( sWhat, nSize+1, lpFormat, vargs ); | ||
49 | } | ||
50 | |||
51 | const char *Exception::what() const throw() | ||
52 | { | ||
53 | return sWhat; | ||
54 | } | ||
55 | |||
56 | int Exception::getErrorCode() | ||
57 | { | ||
58 | return nErrorCode; | ||
59 | } | ||
60 | |||