00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00015
00017
00018 #if !defined(AFXQ_XQEXCEPTION_H__446AD191_E9D0_4658_BD8C_032D29DA123E__INCLUDED_)
00019 #define AFXQ_XQEXCEPTION_H__446AD191_E9D0_4658_BD8C_032D29DA123E__INCLUDED_
00020
00021 #include <xqilla/framework/XQillaExport.hpp>
00022 #include <xqilla/utils/XStr.hpp>
00023
00024 #define XQThrow(type, function, reason) throw type(function, reason, this, __FILE__, __LINE__)
00025 #define XQThrow2(type, function, reason) throw type(function, reason, 0, __FILE__, __LINE__)
00026 #define XQThrow3(type, function, reason, location) throw type(function, reason, location, __FILE__, __LINE__)
00027 #define XQSimpleThrow(reason, xqfile, xqline, xqcolumn) throw XQException(reason, xqfile, xqline, (unsigned int)xqcolumn, __FILE__, __LINE__)
00028
00029 class LocationInfo;
00030
00031 class XQILLA_API XQException
00032 {
00033 public:
00034 XQException(const XMLCh *reason, const XMLCh* file, unsigned int line, unsigned int column, const char *cppFile, unsigned int cppLine);
00035 XQException(const XQException &);
00036 virtual ~XQException();
00037
00038 const XMLCh *getType() const { return m_type; }
00039 const XMLCh *getError() const { return m_error; }
00040
00041 const XMLCh *getXQueryFile() const { return m_xqFile; }
00042 unsigned int getXQueryLine() const { return m_xqLine; }
00043 unsigned int getXQueryColumn() const { return m_xqColumn; }
00044
00045 void setXQueryPosition(const XMLCh *file, unsigned int line, unsigned int column);
00046 void setXQueryPosition(const LocationInfo *info);
00047
00048 const XMLCh *getCppFunction() const { return m_cppFunction; }
00049 const char *getCppFile() const { return m_cppFile; }
00050 unsigned int getCppLine() const { return m_cppLine; }
00051
00053 bool isErrorReported() const { return m_errorReported; }
00054 void setErrorReported(bool value = true) { m_errorReported = value; }
00055
00056 void printDebug(const XMLCh* const context) const;
00057
00058 protected:
00059 XQException(const XMLCh* const type, const XMLCh* const functionName, const XMLCh* const reason, const LocationInfo *info, const char *cppFile, unsigned int cppLine);
00060
00061 private:
00062 XQException &operator=(const XQException &);
00063
00064 XMLCh* m_type;
00065 XMLCh* m_error;
00066
00067 XMLCh* m_cppFunction;
00068 const char *m_cppFile;
00069 unsigned int m_cppLine;
00070
00071 unsigned int m_xqLine, m_xqColumn;
00072 XMLCh* m_xqFile;
00073
00074 bool m_errorReported;
00075 };
00076
00077 #endif // !defined(AFXQ_XQEXCEPTION_H__446AD191_E9D0_4658_BD8C_032D29DA123E__INCLUDED_)
00078