1 | /**
|
---|
2 | * CRXException.h
|
---|
3 | */
|
---|
4 | #ifndef __CRXEXCEPTION_H__
|
---|
5 | #define __CRXEXCEPTION_H__
|
---|
6 |
|
---|
7 | #include <string>
|
---|
8 | #include <stdarg.h>
|
---|
9 |
|
---|
10 | #ifdef _WIN32
|
---|
11 | # define __func__ __FUNCTION__
|
---|
12 | #endif
|
---|
13 |
|
---|
14 | #ifdef _DEBUG
|
---|
15 | #include <stdio.h>
|
---|
16 | #include <ctype.h>
|
---|
17 | #define CRX_DEBUG_TRACE(FMT, ...) \
|
---|
18 | do{ \
|
---|
19 | fprintf(stderr,"[DEBUG][%s %s(%d)] ",__FILE__,__func__,__LINE__); \
|
---|
20 | fprintf(stderr,FMT,##__VA_ARGS__); \
|
---|
21 | }while(0)
|
---|
22 | #define CRX_DEBUG_TRACE_BIN(__VAL,__LEN,FMT,...) \
|
---|
23 | CRX_DEBUG_TRACE(FMT,##__VA_ARGS__); \
|
---|
24 | do{ \
|
---|
25 | int __i, __j; \
|
---|
26 | unsigned char * __U_V = (unsigned char *)__VAL; \
|
---|
27 | for (__i=0 ; __i<__LEN; __i+=16) \
|
---|
28 | { \
|
---|
29 | fprintf(stderr, "[DEBUG][%s %s(%d)] ",__FILE__,__func__,__LINE__); \
|
---|
30 | fprintf(stderr, "%06x : ", __i); \
|
---|
31 | for (__j=0 ; __j<16 ; __j++) \
|
---|
32 | { \
|
---|
33 | if (__i+__j < __LEN) \
|
---|
34 | fprintf(stderr, "%02x ", __U_V[__i+__j]); \
|
---|
35 | else \
|
---|
36 | fprintf(stderr, " "); \
|
---|
37 | } \
|
---|
38 | fprintf(stderr," "); \
|
---|
39 | for (__j=0 ; __j<16 ; __j++) \
|
---|
40 | { \
|
---|
41 | if (__i+__j < __LEN) \
|
---|
42 | fprintf(stderr,"%c", \
|
---|
43 | ' ' <= __U_V[__i+__j] && __U_V[__i+__j] <= '~' ? __U_V[__i+__j] : '.'); \
|
---|
44 | } \
|
---|
45 | fprintf(stderr,"\n"); \
|
---|
46 | } \
|
---|
47 | }while(0)
|
---|
48 | #endif
|
---|
49 |
|
---|
50 | #define CRX_ERROR_SET(__CODE,__FMT,...) \
|
---|
51 | do { \
|
---|
52 | SetErrorCode (__CODE); \
|
---|
53 | SetErrorMessage (__FILE__,__func__,__LINE__,__FMT,##__VA_ARGS__); \
|
---|
54 | } while (0)
|
---|
55 |
|
---|
56 | #define CRX_ADD_SUBCLASS_ERROR(__SUB_CLASS) \
|
---|
57 | do { \
|
---|
58 | AddMessage (__SUB_CLASS.GetErrorMessage ().c_str ()); \
|
---|
59 | } while (0)
|
---|
60 |
|
---|
61 | class CRXException
|
---|
62 | {
|
---|
63 | private:
|
---|
64 | std::string mMessage;
|
---|
65 | int mCode;
|
---|
66 |
|
---|
67 | public:
|
---|
68 | CRXException (void);
|
---|
69 | virtual ~CRXException (void);
|
---|
70 |
|
---|
71 | public:
|
---|
72 | /* get */
|
---|
73 | int GetErrorCode (void) const;
|
---|
74 |
|
---|
75 | std::string GetErrorMessage (void) const;
|
---|
76 |
|
---|
77 | int GetSystemErrorCode (void) const;
|
---|
78 |
|
---|
79 | /* set */
|
---|
80 | void SetErrorCode (const int aCode);
|
---|
81 |
|
---|
82 | void SetErrorMessage (const char * aFile,
|
---|
83 | const char * aFunction,
|
---|
84 | const int aLine,
|
---|
85 | const char * aFormat, ...);
|
---|
86 |
|
---|
87 | std::string MakeErrorMessage (const char * aFile,
|
---|
88 | const char * aFunction,
|
---|
89 | const int aLine,
|
---|
90 | const char * aFormat,
|
---|
91 | va_list aVaList);
|
---|
92 |
|
---|
93 | void AddMessage (const char * aMessage);
|
---|
94 | };
|
---|
95 |
|
---|
96 | #endif // #ifndef __CRXEXCEPTION_H__ |
---|