summaryrefslogtreecommitdiff
path: root/src/exceptionbase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/exceptionbase.cpp')
-rw-r--r--src/exceptionbase.cpp60
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
4Exception::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
15Exception::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
26Exception::Exception( int nCode ) throw() :
27 nErrorCode( nCode ),
28 sWhat( NULL )
29{
30}
31
32Exception::~Exception() throw()
33{
34 if( sWhat )
35 {
36 delete[] sWhat;
37 sWhat = NULL;
38 }
39}
40
41void 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
51const char *Exception::what() const throw()
52{
53 return sWhat;
54}
55
56int Exception::getErrorCode()
57{
58 return nErrorCode;
59}
60